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/13 14:52:06 UTC

[01/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site 93f7e17c1 -> b9b09fecf


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html
index 522bf52..dc23ae9 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html
@@ -27,140 +27,147 @@
 <span class="sourceLineNo">019</span><a name="line.19"></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 org.apache.hadoop.conf.Configuration;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.TableName;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.junit.After;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.junit.AfterClass;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.junit.BeforeClass;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.junit.ClassRule;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.junit.Rule;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.junit.Test;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.junit.experimental.categories.Category;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.junit.rules.TestName;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.slf4j.Logger;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.slf4j.LoggerFactory;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>@Category({MasterTests.class, MediumTests.class})<a name="line.50"></a>
-<span class="sourceLineNo">051</span>public class TestMasterProcedureEvents {<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  @ClassRule<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.54"></a>
-<span class="sourceLineNo">055</span>      HBaseClassTestRule.forClass(TestMasterProcedureEvents.class);<a name="line.55"></a>
+<span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.conf.Configuration;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.fs.Path;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.TableName;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.junit.After;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.junit.AfterClass;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.junit.BeforeClass;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.junit.ClassRule;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.junit.Rule;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.junit.Test;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.junit.experimental.categories.Category;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.junit.rules.TestName;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.slf4j.Logger;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.slf4j.LoggerFactory;<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>@Category({MasterTests.class, MediumTests.class})<a name="line.54"></a>
+<span class="sourceLineNo">055</span>public class TestMasterProcedureEvents {<a name="line.55"></a>
 <span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span>  private static final Logger LOG = LoggerFactory.getLogger(TestCreateTableProcedure.class);<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>  protected static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.59"></a>
+<span class="sourceLineNo">057</span>  @ClassRule<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.58"></a>
+<span class="sourceLineNo">059</span>      HBaseClassTestRule.forClass(TestMasterProcedureEvents.class);<a name="line.59"></a>
 <span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>  @Rule<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  public TestName name = new TestName();<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>  private static void setupConf(Configuration conf) {<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, 1);<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  }<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>  @BeforeClass<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  public static void setupCluster() throws Exception {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    setupConf(UTIL.getConfiguration());<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    UTIL.startMiniCluster(2);<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    UTIL.waitUntilNoRegionsInTransition();<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  }<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>  @AfterClass<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  public static void cleanupTest() throws Exception {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    try {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      UTIL.shutdownMiniCluster();<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    } catch (Exception e) {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      LOG.warn("failure shutting down cluster", 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>  @After<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  public void tearDown() throws Exception {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    for (TableDescriptor htd: UTIL.getAdmin().listTableDescriptors()) {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      LOG.info("Tear down, remove table=" + htd.getTableName());<a name="line.88"></a>
-<span class="sourceLineNo">089</span>      UTIL.deleteTable(htd.getTableName());<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  }<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  @Test<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  public void testMasterInitializedEvent() throws Exception {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    HMaster master = UTIL.getMiniHBaseCluster().getMaster();<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = master.getMasterProcedureExecutor();<a name="line.97"></a>
-<span class="sourceLineNo">098</span><a name="line.98"></a>
-<span class="sourceLineNo">099</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(tableName).build();<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    TableDescriptor htd = TableDescriptorBuilder.newBuilder(tableName)<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      .setColumnFamily(ColumnFamilyDescriptorBuilder.of("f")).build();<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>    while (!master.isInitialized()) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      Thread.sleep(250);<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    master.setInitialized(false); // fake it, set back later<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>    // check event wait/wake<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    testProcedureEventWaitWake(master, master.getInitializedEvent(),<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      new CreateTableProcedure(procExec.getEnvironment(), htd, new RegionInfo[] { hri }));<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private void testProcedureEventWaitWake(final HMaster master, final ProcedureEvent&lt;?&gt; event,<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      final Procedure&lt;MasterProcedureEnv&gt; proc) throws Exception {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = master.getMasterProcedureExecutor();<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    final MasterProcedureScheduler procSched = procExec.getEnvironment().getProcedureScheduler();<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>    final long startPollCalls = procSched.getPollCalls();<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    final long startNullPollCalls = procSched.getNullPollCalls();<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>    // check that nothing is in the event queue<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    LOG.debug("checking " + event);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    assertEquals(false, event.isReady());<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    assertEquals(0, event.getSuspendedProcedures().size());<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>    // submit the procedure<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    LOG.debug("submit " + proc);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    long procId = procExec.submitProcedure(proc);<a name="line.128"></a>
-<span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>    // wait until the event is in the queue (proc executed and got into suspended state)<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    LOG.debug("wait procedure suspended on " + event);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    while (event.getSuspendedProcedures().size() &lt; 1) Thread.sleep(25);<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>    // check that the proc is in the event queue<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    LOG.debug("checking " + event + " size=" + event.getSuspendedProcedures().size());<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    assertEquals(false, event.isReady());<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    assertEquals(1, event.getSuspendedProcedures().size());<a name="line.137"></a>
-<span class="sourceLineNo">138</span><a name="line.138"></a>
-<span class="sourceLineNo">139</span>    // wake the event<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    LOG.debug("wake " + event);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    event.wake(procSched);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    assertEquals(true, event.isReady());<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>    // wait until proc completes<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    LOG.debug("waiting " + proc);<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    ProcedureTestingUtility.waitProcedure(procExec, procId);<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>    // check that nothing is in the event queue and the event is not suspended<a name="line.148"></a>
+<span class="sourceLineNo">061</span>  private static final Logger LOG = LoggerFactory.getLogger(TestCreateTableProcedure.class);<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>  protected static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>  @Rule<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  public TestName name = new TestName();<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private static void setupConf(Configuration conf) throws IOException {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, 1);<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  }<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>  @BeforeClass<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  public static void setupCluster() throws Exception {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    Configuration conf = UTIL.getConfiguration();<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    setupConf(UTIL.getConfiguration());<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    UTIL.startMiniDFSCluster(3);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    CommonFSUtils.setWALRootDir(conf, new Path(conf.get("fs.defaultFS"), "/tmp/wal"));<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    UTIL.startMiniCluster(2);<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    UTIL.waitUntilNoRegionsInTransition();<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  }<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>  @AfterClass<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static void cleanupTest() throws Exception {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    try {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      UTIL.shutdownMiniCluster();<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    } catch (Exception e) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      LOG.warn("failure shutting down cluster", e);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  }<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>  @After<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public void tearDown() throws Exception {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    for (TableDescriptor htd: UTIL.getAdmin().listTableDescriptors()) {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      LOG.info("Tear down, remove table=" + htd.getTableName());<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      UTIL.deleteTable(htd.getTableName());<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    }<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  }<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>  @Test<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  public void testMasterInitializedEvent() throws Exception {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    HMaster master = UTIL.getMiniHBaseCluster().getMaster();<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = master.getMasterProcedureExecutor();<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(tableName).build();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    TableDescriptor htd = TableDescriptorBuilder.newBuilder(tableName)<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      .setColumnFamily(ColumnFamilyDescriptorBuilder.of("f")).build();<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>    while (!master.isInitialized()) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      Thread.sleep(250);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    }<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    master.setInitialized(false); // fake it, set back later<a name="line.113"></a>
+<span class="sourceLineNo">114</span><a name="line.114"></a>
+<span class="sourceLineNo">115</span>    // check event wait/wake<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    testProcedureEventWaitWake(master, master.getInitializedEvent(),<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      new CreateTableProcedure(procExec.getEnvironment(), htd, new RegionInfo[] { hri }));<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  }<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private void testProcedureEventWaitWake(final HMaster master, final ProcedureEvent&lt;?&gt; event,<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      final Procedure&lt;MasterProcedureEnv&gt; proc) throws Exception {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = master.getMasterProcedureExecutor();<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    final MasterProcedureScheduler procSched = procExec.getEnvironment().getProcedureScheduler();<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span>    final long startPollCalls = procSched.getPollCalls();<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    final long startNullPollCalls = procSched.getNullPollCalls();<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // check that nothing is in the event queue<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    LOG.debug("checking " + event);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    assertEquals(false, event.isReady());<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    assertEquals(0, event.getSuspendedProcedures().size());<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>    // submit the procedure<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    LOG.debug("submit " + proc);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    long procId = procExec.submitProcedure(proc);<a name="line.135"></a>
+<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">137</span>    // wait until the event is in the queue (proc executed and got into suspended state)<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    LOG.debug("wait procedure suspended on " + event);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    while (event.getSuspendedProcedures().size() &lt; 1) Thread.sleep(25);<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>    // check that the proc is in the event queue<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    LOG.debug("checking " + event + " size=" + event.getSuspendedProcedures().size());<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    assertEquals(false, event.isReady());<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    assertEquals(1, event.getSuspendedProcedures().size());<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>    // wake the event<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    LOG.debug("wake " + event);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    event.wake(procSched);<a name="line.148"></a>
 <span class="sourceLineNo">149</span>    assertEquals(true, event.isReady());<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    assertEquals(0, event.getSuspendedProcedures().size());<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    LOG.debug("completed execution of " + proc +<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      " pollCalls=" + (procSched.getPollCalls() - startPollCalls) +<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      " nullPollCalls=" + (procSched.getNullPollCalls() - startNullPollCalls));<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
-<span class="sourceLineNo">155</span>}<a name="line.155"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>    // wait until proc completes<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    LOG.debug("waiting " + proc);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    ProcedureTestingUtility.waitProcedure(procExec, procId);<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>    // check that nothing is in the event queue and the event is not suspended<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    assertEquals(true, event.isReady());<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    assertEquals(0, event.getSuspendedProcedures().size());<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    LOG.debug("completed execution of " + proc +<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      " pollCalls=" + (procSched.getPollCalls() - startPollCalls) +<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      " nullPollCalls=" + (procSched.getNullPollCalls() - startNullPollCalls));<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
+<span class="sourceLineNo">162</span>}<a name="line.162"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html
index e5b71af..0e9d7bc 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html
@@ -41,174 +41,177 @@
 <span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<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.Threads;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hdfs.MiniDFSCluster;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hdfs.server.datanode.DataNode;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.junit.Before;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.junit.ClassRule;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.junit.Test;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.junit.experimental.categories.Category;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.slf4j.Logger;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.slf4j.LoggerFactory;<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 TestWALProcedureStoreOnHDFS {<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(TestWALProcedureStoreOnHDFS.class);<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private static final Logger LOG = LoggerFactory.getLogger(TestWALProcedureStoreOnHDFS.class);<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>  protected static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.55"></a>
-<span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span>  private WALProcedureStore store;<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>  private ProcedureStore.ProcedureStoreListener stopProcedureListener = new ProcedureStore.ProcedureStoreListener() {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    @Override<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    public void postSync() {}<a name="line.61"></a>
-<span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span>    @Override<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    public void abortProcess() {<a name="line.64"></a>
-<span class="sourceLineNo">065</span>      LOG.error(HBaseMarkers.FATAL, "Abort the Procedure Store");<a name="line.65"></a>
-<span class="sourceLineNo">066</span>      store.stop(true);<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    }<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  };<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>  @Before<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  public void initConfig() {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    Configuration conf = UTIL.getConfiguration();<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>    conf.setInt("dfs.replication", 3);<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    conf.setInt("dfs.namenode.replication.min", 3);<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>    // increase the value for slow test-env<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    conf.setInt(WALProcedureStore.WAIT_BEFORE_ROLL_CONF_KEY, 1000);<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    conf.setInt(WALProcedureStore.ROLL_RETRIES_CONF_KEY, 10);<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    conf.setInt(WALProcedureStore.MAX_SYNC_FAILURE_ROLL_CONF_KEY, 10);<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  }<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>  // No @Before because some tests need to do additional config first<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  private void setupDFS() throws Exception {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    MiniDFSCluster dfs = UTIL.startMiniDFSCluster(3);<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>    Path logDir = new Path(new Path(dfs.getFileSystem().getUri()), "/test-logs");<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    store = ProcedureTestingUtility.createWalStore(UTIL.getConfiguration(), logDir);<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    store.registerListener(stopProcedureListener);<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    store.start(8);<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    store.recoverLease();<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  }<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>  // No @After<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  @SuppressWarnings("JUnit4TearDownNotRun")<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  public void tearDown() throws Exception {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    store.stop(false);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    UTIL.getDFSCluster().getFileSystem().delete(store.getWALDir(), true);<a name="line.98"></a>
-<span class="sourceLineNo">099</span><a name="line.99"></a>
-<span class="sourceLineNo">100</span>    try {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      UTIL.shutdownMiniCluster();<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    } catch (Exception e) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      LOG.warn("failure shutting down cluster", e);<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  }<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>  @Test(expected=RuntimeException.class)<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  public void testWalAbortOnLowReplication() throws Exception {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    setupDFS();<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>    assertEquals(3, UTIL.getDFSCluster().getDataNodes().size());<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>    LOG.info("Stop DataNode");<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    UTIL.getDFSCluster().stopDataNode(0);<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    assertEquals(2, UTIL.getDFSCluster().getDataNodes().size());<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>    store.insert(new TestProcedure(1, -1), null);<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    for (long i = 2; store.isRunning(); ++i) {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      assertEquals(2, UTIL.getDFSCluster().getDataNodes().size());<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      store.insert(new TestProcedure(i, -1), null);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      Thread.sleep(100);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    }<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    assertFalse(store.isRunning());<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  }<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>  @Test<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  public void testWalAbortOnLowReplicationWithQueuedWriters() throws Exception {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    setupDFS();<a name="line.128"></a>
-<span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>    assertEquals(3, UTIL.getDFSCluster().getDataNodes().size());<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    store.registerListener(new ProcedureStore.ProcedureStoreListener() {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      @Override<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      public void postSync() { Threads.sleepWithoutInterrupt(2000); }<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hdfs.MiniDFSCluster;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hdfs.server.datanode.DataNode;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.junit.Before;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.junit.ClassRule;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.junit.Test;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.junit.experimental.categories.Category;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.slf4j.Logger;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.slf4j.LoggerFactory;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>@Category({MasterTests.class, LargeTests.class})<a name="line.47"></a>
+<span class="sourceLineNo">048</span>public class TestWALProcedureStoreOnHDFS {<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span>  @ClassRule<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.51"></a>
+<span class="sourceLineNo">052</span>      HBaseClassTestRule.forClass(TestWALProcedureStoreOnHDFS.class);<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private static final Logger LOG = LoggerFactory.getLogger(TestWALProcedureStoreOnHDFS.class);<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  protected static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span>  private WALProcedureStore store;<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  private ProcedureStore.ProcedureStoreListener stopProcedureListener = new ProcedureStore.ProcedureStoreListener() {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    @Override<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    public void postSync() {}<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>    @Override<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    public void abortProcess() {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>      LOG.error(HBaseMarkers.FATAL, "Abort the Procedure Store");<a name="line.66"></a>
+<span class="sourceLineNo">067</span>      store.stop(true);<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>  @Before<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  public void initConfig() {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    Configuration conf = UTIL.getConfiguration();<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>    conf.setInt("dfs.replication", 3);<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    conf.setInt("dfs.namenode.replication.min", 3);<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>    // increase the value for slow test-env<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    conf.setInt(WALProcedureStore.WAIT_BEFORE_ROLL_CONF_KEY, 1000);<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    conf.setInt(WALProcedureStore.ROLL_RETRIES_CONF_KEY, 10);<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    conf.setInt(WALProcedureStore.MAX_SYNC_FAILURE_ROLL_CONF_KEY, 10);<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>  // No @Before because some tests need to do additional config first<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  private void setupDFS() throws Exception {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    Configuration conf = UTIL.getConfiguration();<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    MiniDFSCluster dfs = UTIL.startMiniDFSCluster(3);<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    CommonFSUtils.setWALRootDir(conf, new Path(conf.get("fs.defaultFS"), "/tmp/wal"));<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>    Path logDir = new Path(new Path(dfs.getFileSystem().getUri()), "/test-logs");<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    store = ProcedureTestingUtility.createWalStore(conf, logDir);<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    store.registerListener(stopProcedureListener);<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    store.start(8);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    store.recoverLease();<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>  // No @After<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  @SuppressWarnings("JUnit4TearDownNotRun")<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  public void tearDown() throws Exception {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    store.stop(false);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    UTIL.getDFSCluster().getFileSystem().delete(store.getWALDir(), true);<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>    try {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      UTIL.shutdownMiniCluster();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    } catch (Exception e) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      LOG.warn("failure shutting down cluster", e);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    }<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  @Test(expected=RuntimeException.class)<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  public void testWalAbortOnLowReplication() throws Exception {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    setupDFS();<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>    assertEquals(3, UTIL.getDFSCluster().getDataNodes().size());<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>    LOG.info("Stop DataNode");<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    UTIL.getDFSCluster().stopDataNode(0);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    assertEquals(2, UTIL.getDFSCluster().getDataNodes().size());<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>    store.insert(new TestProcedure(1, -1), null);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    for (long i = 2; store.isRunning(); ++i) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      assertEquals(2, UTIL.getDFSCluster().getDataNodes().size());<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      store.insert(new TestProcedure(i, -1), null);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      Thread.sleep(100);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    }<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    assertFalse(store.isRunning());<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>  @Test<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  public void testWalAbortOnLowReplicationWithQueuedWriters() throws Exception {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    setupDFS();<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>    assertEquals(3, UTIL.getDFSCluster().getDataNodes().size());<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    store.registerListener(new ProcedureStore.ProcedureStoreListener() {<a name="line.134"></a>
 <span class="sourceLineNo">135</span>      @Override<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      public void abortProcess() {}<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    });<a name="line.137"></a>
-<span class="sourceLineNo">138</span><a name="line.138"></a>
-<span class="sourceLineNo">139</span>    final AtomicInteger reCount = new AtomicInteger(0);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    Thread[] thread = new Thread[store.getNumThreads() * 2 + 1];<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    for (int i = 0; i &lt; thread.length; ++i) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      final long procId = i + 1L;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      thread[i] = new Thread(() -&gt; {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>        try {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>          LOG.debug("[S] INSERT " + procId);<a name="line.145"></a>
-<span class="sourceLineNo">146</span>          store.insert(new TestProcedure(procId, -1), null);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>          LOG.debug("[E] INSERT " + procId);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        } catch (RuntimeException e) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>          reCount.incrementAndGet();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>          LOG.debug("[F] INSERT " + procId + ": " + e.getMessage());<a name="line.150"></a>
-<span class="sourceLineNo">151</span>        }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      });<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      thread[i].start();<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    }<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span>    Thread.sleep(1000);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    LOG.info("Stop DataNode");<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    UTIL.getDFSCluster().stopDataNode(0);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    assertEquals(2, UTIL.getDFSCluster().getDataNodes().size());<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>    for (int i = 0; i &lt; thread.length; ++i) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      thread[i].join();<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>    assertFalse(store.isRunning());<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    assertTrue(reCount.toString(), reCount.get() &gt;= store.getNumThreads() &amp;&amp;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>                                   reCount.get() &lt; thread.length);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>  @Test<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  public void testWalRollOnLowReplication() throws Exception {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    UTIL.getConfiguration().setInt("dfs.namenode.replication.min", 1);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    setupDFS();<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>    int dnCount = 0;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    store.insert(new TestProcedure(1, -1), null);<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    UTIL.getDFSCluster().restartDataNode(dnCount);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    for (long i = 2; i &lt; 100; ++i) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      store.insert(new TestProcedure(i, -1), null);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      waitForNumReplicas(3);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      Thread.sleep(100);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      if ((i % 30) == 0) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>        LOG.info("Restart Data Node");<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        UTIL.getDFSCluster().restartDataNode(++dnCount % 3);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    }<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    assertTrue(store.isRunning());<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  public void waitForNumReplicas(int numReplicas) throws Exception {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    while (UTIL.getDFSCluster().getDataNodes().size() &lt; numReplicas) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      Thread.sleep(100);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    }<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>    for (int i = 0; i &lt; numReplicas; ++i) {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      for (DataNode dn: UTIL.getDFSCluster().getDataNodes()) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        while (!dn.isDatanodeFullyStarted()) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>          Thread.sleep(100);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>}<a name="line.203"></a>
+<span class="sourceLineNo">136</span>      public void postSync() { Threads.sleepWithoutInterrupt(2000); }<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>      @Override<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      public void abortProcess() {}<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    });<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>    final AtomicInteger reCount = new AtomicInteger(0);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    Thread[] thread = new Thread[store.getNumThreads() * 2 + 1];<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    for (int i = 0; i &lt; thread.length; ++i) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      final long procId = i + 1L;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      thread[i] = new Thread(() -&gt; {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        try {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>          LOG.debug("[S] INSERT " + procId);<a name="line.148"></a>
+<span class="sourceLineNo">149</span>          store.insert(new TestProcedure(procId, -1), null);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>          LOG.debug("[E] INSERT " + procId);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>        } catch (RuntimeException e) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>          reCount.incrementAndGet();<a name="line.152"></a>
+<span class="sourceLineNo">153</span>          LOG.debug("[F] INSERT " + procId + ": " + e.getMessage());<a name="line.153"></a>
+<span class="sourceLineNo">154</span>        }<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      });<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      thread[i].start();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    }<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>    Thread.sleep(1000);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    LOG.info("Stop DataNode");<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    UTIL.getDFSCluster().stopDataNode(0);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    assertEquals(2, UTIL.getDFSCluster().getDataNodes().size());<a name="line.162"></a>
+<span class="sourceLineNo">163</span><a name="line.163"></a>
+<span class="sourceLineNo">164</span>    for (int i = 0; i &lt; thread.length; ++i) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      thread[i].join();<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    }<a name="line.166"></a>
+<span class="sourceLineNo">167</span><a name="line.167"></a>
+<span class="sourceLineNo">168</span>    assertFalse(store.isRunning());<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    assertTrue(reCount.toString(), reCount.get() &gt;= store.getNumThreads() &amp;&amp;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>                                   reCount.get() &lt; thread.length);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
+<span class="sourceLineNo">172</span><a name="line.172"></a>
+<span class="sourceLineNo">173</span>  @Test<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public void testWalRollOnLowReplication() throws Exception {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    UTIL.getConfiguration().setInt("dfs.namenode.replication.min", 1);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    setupDFS();<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>    int dnCount = 0;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    store.insert(new TestProcedure(1, -1), null);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    UTIL.getDFSCluster().restartDataNode(dnCount);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    for (long i = 2; i &lt; 100; ++i) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      store.insert(new TestProcedure(i, -1), null);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      waitForNumReplicas(3);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      Thread.sleep(100);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      if ((i % 30) == 0) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>        LOG.info("Restart Data Node");<a name="line.186"></a>
+<span class="sourceLineNo">187</span>        UTIL.getDFSCluster().restartDataNode(++dnCount % 3);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      }<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    }<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    assertTrue(store.isRunning());<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>  public void waitForNumReplicas(int numReplicas) throws Exception {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    while (UTIL.getDFSCluster().getDataNodes().size() &lt; numReplicas) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      Thread.sleep(100);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span>    for (int i = 0; i &lt; numReplicas; ++i) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      for (DataNode dn: UTIL.getDFSCluster().getDataNodes()) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        while (!dn.isDatanodeFullyStarted()) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>          Thread.sleep(100);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        }<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
+<span class="sourceLineNo">206</span>}<a name="line.206"></a>
 
 
 


[17/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
index 8ef8fea..57d590b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
@@ -47,130 +47,130 @@
 <span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.ServerName;<a name="line.39"></a>
 <span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.TableName;<a name="line.40"></a>
 <span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.YouAreDeadException;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.DoNotRetryRegionException;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.Result;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.exceptions.UnexpectedStateException;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.favored.FavoredNodesManager;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.favored.FavoredNodesPromoter;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.MetricsAssignmentManager;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.master.RegionState.State;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.master.ServerListener;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.master.TableStateManager;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.master.balancer.FavoredStochasticBalancer;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.procedure2.ProcedureInMemoryChore;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.procedure2.util.StringUtils;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.regionserver.SequenceId;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.util.VersionInfo;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.zookeeper.KeeperException;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.slf4j.Logger;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.slf4j.LoggerFactory;<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse;<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>/**<a name="line.91"></a>
-<span class="sourceLineNo">092</span> * The AssignmentManager is the coordinator for region assign/unassign operations.<a name="line.92"></a>
-<span class="sourceLineNo">093</span> * &lt;ul&gt;<a name="line.93"></a>
-<span class="sourceLineNo">094</span> * &lt;li&gt;In-memory states of regions and servers are stored in {@link RegionStates}.&lt;/li&gt;<a name="line.94"></a>
-<span class="sourceLineNo">095</span> * &lt;li&gt;hbase:meta state updates are handled by {@link RegionStateStore}.&lt;/li&gt;<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * &lt;/ul&gt;<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * Regions are created by CreateTable, Split, Merge.<a name="line.97"></a>
-<span class="sourceLineNo">098</span> * Regions are deleted by DeleteTable, Split, Merge.<a name="line.98"></a>
-<span class="sourceLineNo">099</span> * Assigns are triggered by CreateTable, EnableTable, Split, Merge, ServerCrash.<a name="line.99"></a>
-<span class="sourceLineNo">100</span> * Unassigns are triggered by DisableTable, Split, Merge<a name="line.100"></a>
-<span class="sourceLineNo">101</span> */<a name="line.101"></a>
-<span class="sourceLineNo">102</span>@InterfaceAudience.Private<a name="line.102"></a>
-<span class="sourceLineNo">103</span>public class AssignmentManager implements ServerListener {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  private static final Logger LOG = LoggerFactory.getLogger(AssignmentManager.class);<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>  // TODO: AMv2<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  //  - handle region migration from hbase1 to hbase2.<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  //  - handle sys table assignment first (e.g. acl, namespace)<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  //  - handle table priorities<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  //  - If ServerBusyException trying to update hbase:meta, we abort the Master<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  //   See updateRegionLocation in RegionStateStore.<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  //<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  // See also<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  // https://docs.google.com/document/d/1eVKa7FHdeoJ1-9o8yZcOTAQbv0u0bblBlCCzVSIn69g/edit#heading=h.ystjyrkbtoq5<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  // for other TODOs.<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  public static final String BOOTSTRAP_THREAD_POOL_SIZE_CONF_KEY =<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      "hbase.assignment.bootstrap.thread.pool.size";<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>  public static final String ASSIGN_DISPATCH_WAIT_MSEC_CONF_KEY =<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      "hbase.assignment.dispatch.wait.msec";<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  private static final int DEFAULT_ASSIGN_DISPATCH_WAIT_MSEC = 150;<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>  public static final String ASSIGN_DISPATCH_WAITQ_MAX_CONF_KEY =<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      "hbase.assignment.dispatch.wait.queue.max.size";<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  private static final int DEFAULT_ASSIGN_DISPATCH_WAITQ_MAX = 100;<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>  public static final String RIT_CHORE_INTERVAL_MSEC_CONF_KEY =<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      "hbase.assignment.rit.chore.interval.msec";<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  private static final int DEFAULT_RIT_CHORE_INTERVAL_MSEC = 60 * 1000;<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>  public static final String ASSIGN_MAX_ATTEMPTS =<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      "hbase.assignment.maximum.attempts";<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  private static final int DEFAULT_ASSIGN_MAX_ATTEMPTS = Integer.MAX_VALUE;<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span>  /** Region in Transition metrics threshold time */<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  public static final String METRICS_RIT_STUCK_WARNING_THRESHOLD =<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      "hbase.metrics.rit.stuck.warning.threshold";<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  private static final int DEFAULT_RIT_STUCK_WARNING_THRESHOLD = 60 * 1000;<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  private final ProcedureEvent&lt;?&gt; metaAssignEvent = new ProcedureEvent&lt;&gt;("meta assign");<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private final ProcedureEvent&lt;?&gt; metaLoadEvent = new ProcedureEvent&lt;&gt;("meta load");<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private final MetricsAssignmentManager metrics;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  private final RegionInTransitionChore ritChore;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  private final MasterServices master;<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private final AtomicBoolean running = new AtomicBoolean(false);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  private final RegionStates regionStates = new RegionStates();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  private final RegionStateStore regionStateStore;<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>  private final boolean shouldAssignRegionsWithFavoredNodes;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  private final int assignDispatchWaitQueueMaxSize;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  private final int assignDispatchWaitMillis;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  private final int assignMaxAttempts;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>  private final Object checkIfShouldMoveSystemRegionLock = new Object();<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span>  private Thread assignThread;<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>  public AssignmentManager(final MasterServices master) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    this(master, new RegionStateStore(master));<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>  public AssignmentManager(final MasterServices master, final RegionStateStore stateStore) {<a name="line.165"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.DoNotRetryRegionException;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.Result;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.exceptions.UnexpectedStateException;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.favored.FavoredNodesManager;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.favored.FavoredNodesPromoter;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.MetricsAssignmentManager;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.master.RegionState.State;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.master.ServerListener;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.master.TableStateManager;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.master.balancer.FavoredStochasticBalancer;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.procedure2.ProcedureInMemoryChore;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.procedure2.util.StringUtils;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.regionserver.SequenceId;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.VersionInfo;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.zookeeper.KeeperException;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.slf4j.Logger;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.slf4j.LoggerFactory;<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse;<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>/**<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * The AssignmentManager is the coordinator for region assign/unassign operations.<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * &lt;ul&gt;<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * &lt;li&gt;In-memory states of regions and servers are stored in {@link RegionStates}.&lt;/li&gt;<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * &lt;li&gt;hbase:meta state updates are handled by {@link RegionStateStore}.&lt;/li&gt;<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * &lt;/ul&gt;<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * Regions are created by CreateTable, Split, Merge.<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * Regions are deleted by DeleteTable, Split, Merge.<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * Assigns are triggered by CreateTable, EnableTable, Split, Merge, ServerCrash.<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * Unassigns are triggered by DisableTable, Split, Merge<a name="line.99"></a>
+<span class="sourceLineNo">100</span> */<a name="line.100"></a>
+<span class="sourceLineNo">101</span>@InterfaceAudience.Private<a name="line.101"></a>
+<span class="sourceLineNo">102</span>public class AssignmentManager implements ServerListener {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  private static final Logger LOG = LoggerFactory.getLogger(AssignmentManager.class);<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  // TODO: AMv2<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  //  - handle region migration from hbase1 to hbase2.<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  //  - handle sys table assignment first (e.g. acl, namespace)<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  //  - handle table priorities<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  //  - If ServerBusyException trying to update hbase:meta, we abort the Master<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  //   See updateRegionLocation in RegionStateStore.<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  //<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  // See also<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  // https://docs.google.com/document/d/1eVKa7FHdeoJ1-9o8yZcOTAQbv0u0bblBlCCzVSIn69g/edit#heading=h.ystjyrkbtoq5<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  // for other TODOs.<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  public static final String BOOTSTRAP_THREAD_POOL_SIZE_CONF_KEY =<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      "hbase.assignment.bootstrap.thread.pool.size";<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>  public static final String ASSIGN_DISPATCH_WAIT_MSEC_CONF_KEY =<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      "hbase.assignment.dispatch.wait.msec";<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  private static final int DEFAULT_ASSIGN_DISPATCH_WAIT_MSEC = 150;<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  public static final String ASSIGN_DISPATCH_WAITQ_MAX_CONF_KEY =<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      "hbase.assignment.dispatch.wait.queue.max.size";<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  private static final int DEFAULT_ASSIGN_DISPATCH_WAITQ_MAX = 100;<a name="line.125"></a>
+<span class="sourceLineNo">126</span><a name="line.126"></a>
+<span class="sourceLineNo">127</span>  public static final String RIT_CHORE_INTERVAL_MSEC_CONF_KEY =<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      "hbase.assignment.rit.chore.interval.msec";<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  private static final int DEFAULT_RIT_CHORE_INTERVAL_MSEC = 60 * 1000;<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public static final String ASSIGN_MAX_ATTEMPTS =<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      "hbase.assignment.maximum.attempts";<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  private static final int DEFAULT_ASSIGN_MAX_ATTEMPTS = Integer.MAX_VALUE;<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span>  /** Region in Transition metrics threshold time */<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  public static final String METRICS_RIT_STUCK_WARNING_THRESHOLD =<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      "hbase.metrics.rit.stuck.warning.threshold";<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  private static final int DEFAULT_RIT_STUCK_WARNING_THRESHOLD = 60 * 1000;<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>  private final ProcedureEvent&lt;?&gt; metaAssignEvent = new ProcedureEvent&lt;&gt;("meta assign");<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  private final ProcedureEvent&lt;?&gt; metaLoadEvent = new ProcedureEvent&lt;&gt;("meta load");<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>  private final MetricsAssignmentManager metrics;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  private final RegionInTransitionChore ritChore;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  private final MasterServices master;<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>  private final AtomicBoolean running = new AtomicBoolean(false);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  private final RegionStates regionStates = new RegionStates();<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private final RegionStateStore regionStateStore;<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>  private final boolean shouldAssignRegionsWithFavoredNodes;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  private final int assignDispatchWaitQueueMaxSize;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  private final int assignDispatchWaitMillis;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  private final int assignMaxAttempts;<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  private final Object checkIfShouldMoveSystemRegionLock = new Object();<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>  private Thread assignThread;<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>  public AssignmentManager(final MasterServices master) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    this(master, new RegionStateStore(master));<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  }<a name="line.162"></a>
+<span class="sourceLineNo">163</span><a name="line.163"></a>
+<span class="sourceLineNo">164</span>  @VisibleForTesting<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  AssignmentManager(final MasterServices master, final RegionStateStore stateStore) {<a name="line.165"></a>
 <span class="sourceLineNo">166</span>    this.master = master;<a name="line.166"></a>
 <span class="sourceLineNo">167</span>    this.regionStateStore = stateStore;<a name="line.167"></a>
 <span class="sourceLineNo">168</span>    this.metrics = new MetricsAssignmentManager();<a name="line.168"></a>
@@ -987,941 +987,895 @@
 <span class="sourceLineNo">979</span>  //  RS Status update (report online regions) helpers<a name="line.979"></a>
 <span class="sourceLineNo">980</span>  // ============================================================================================<a name="line.980"></a>
 <span class="sourceLineNo">981</span>  /**<a name="line.981"></a>
-<span class="sourceLineNo">982</span>   * the master will call this method when the RS send the regionServerReport().<a name="line.982"></a>
-<span class="sourceLineNo">983</span>   * the report will contains the "online regions".<a name="line.983"></a>
-<span class="sourceLineNo">984</span>   * this method will check the the online regions against the in-memory state of the AM,<a name="line.984"></a>
-<span class="sourceLineNo">985</span>   * if there is a mismatch we will try to fence out the RS with the assumption<a name="line.985"></a>
-<span class="sourceLineNo">986</span>   * that something went wrong on the RS side.<a name="line.986"></a>
-<span class="sourceLineNo">987</span>   */<a name="line.987"></a>
-<span class="sourceLineNo">988</span>  public void reportOnlineRegions(final ServerName serverName, final Set&lt;byte[]&gt; regionNames)<a name="line.988"></a>
-<span class="sourceLineNo">989</span>      throws YouAreDeadException {<a name="line.989"></a>
-<span class="sourceLineNo">990</span>    if (!isRunning()) return;<a name="line.990"></a>
-<span class="sourceLineNo">991</span>    if (LOG.isTraceEnabled()) {<a name="line.991"></a>
-<span class="sourceLineNo">992</span>      LOG.trace("ReportOnlineRegions " + serverName + " regionCount=" + regionNames.size() +<a name="line.992"></a>
-<span class="sourceLineNo">993</span>        ", metaLoaded=" + isMetaLoaded() + " " +<a name="line.993"></a>
-<span class="sourceLineNo">994</span>          regionNames.stream().map(element -&gt; Bytes.toStringBinary(element)).<a name="line.994"></a>
-<span class="sourceLineNo">995</span>            collect(Collectors.toList()));<a name="line.995"></a>
-<span class="sourceLineNo">996</span>    }<a name="line.996"></a>
-<span class="sourceLineNo">997</span><a name="line.997"></a>
-<span class="sourceLineNo">998</span>    final ServerStateNode serverNode = regionStates.getOrCreateServer(serverName);<a name="line.998"></a>
-<span class="sourceLineNo">999</span><a name="line.999"></a>
-<span class="sourceLineNo">1000</span>    synchronized (serverNode) {<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>      if (!serverNode.isInState(ServerState.ONLINE)) {<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>        LOG.warn("Got a report from a server result in state " + serverNode.getState());<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>        return;<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>      }<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>    }<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span><a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>    if (regionNames.isEmpty()) {<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>      // nothing to do if we don't have regions<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>      LOG.trace("no online region found on " + serverName);<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>    } else if (!isMetaLoaded()) {<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>      // if we are still on startup, discard the report unless is from someone holding meta<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      checkOnlineRegionsReportForMeta(serverNode, regionNames);<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>    } else {<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      // The Heartbeat updates us of what regions are only. check and verify the state.<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>      checkOnlineRegionsReport(serverNode, regionNames);<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>    }<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span><a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>    // wake report event<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>    wakeServerReportEvent(serverNode);<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>  void checkOnlineRegionsReportForMeta(ServerStateNode serverNode, Set&lt;byte[]&gt; regionNames) {<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>    try {<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>      for (byte[] regionName : regionNames) {<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>        final RegionInfo hri = getMetaRegionFromName(regionName);<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>        if (hri == null) {<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>          if (LOG.isTraceEnabled()) {<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>            LOG.trace("Skip online report for region=" + Bytes.toStringBinary(regionName) +<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>              " while meta is loading");<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>          }<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>          continue;<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>        }<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span><a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>        RegionStateNode regionNode = regionStates.getOrCreateRegionStateNode(hri);<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>        LOG.info("META REPORTED: " + regionNode);<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>        regionNode.lock();<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>        try {<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>          if (!reportTransition(regionNode, serverNode, TransitionCode.OPENED, 0)) {<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>            LOG.warn("META REPORTED but no procedure found (complete?); set location=" +<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>              serverNode.getServerName());<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>            regionNode.setRegionLocation(serverNode.getServerName());<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>          } else if (LOG.isTraceEnabled()) {<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>            LOG.trace("META REPORTED: " + regionNode);<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>          }<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>        } finally {<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>          regionNode.unlock();<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>        }<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>      }<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    } catch (IOException e) {<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>      ServerName serverName = serverNode.getServerName();<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>      LOG.warn("KILLING " + serverName + ": " + e.getMessage());<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>      killRegionServer(serverNode);<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    }<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>  }<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span><a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>  void checkOnlineRegionsReport(final ServerStateNode serverNode, final Set&lt;byte[]&gt; regionNames) {<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    final ServerName serverName = serverNode.getServerName();<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    try {<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      for (byte[] regionName: regionNames) {<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>        if (!isRunning()) {<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>          return;<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>        }<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>        final RegionStateNode regionNode = regionStates.getRegionStateNodeFromName(regionName);<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>        if (regionNode == null) {<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>          throw new UnexpectedStateException("Not online: " + Bytes.toStringBinary(regionName));<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>        }<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>        regionNode.lock();<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>        try {<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>          if (regionNode.isInState(State.OPENING, State.OPEN)) {<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>            if (!regionNode.getRegionLocation().equals(serverName)) {<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>              throw new UnexpectedStateException(regionNode.toString() +<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>                " reported OPEN on server=" + serverName +<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>                " but state has otherwise.");<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>            } else if (regionNode.isInState(State.OPENING)) {<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>              try {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>                if (!reportTransition(regionNode, serverNode, TransitionCode.OPENED, 0)) {<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>                  LOG.warn(regionNode.toString() + " reported OPEN on server=" + serverName +<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>                    " but state has otherwise AND NO procedure is running");<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>                }<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>              } catch (UnexpectedStateException e) {<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>                LOG.warn(regionNode.toString() + " reported unexpteced OPEN: " + e.getMessage(), e);<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>              }<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>            }<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>          } else if (!regionNode.isInState(State.CLOSING, State.SPLITTING)) {<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>            long diff = regionNode.getLastUpdate() - EnvironmentEdgeManager.currentTime();<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>            if (diff &gt; 1000/*One Second... make configurable if an issue*/) {<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>              // So, we can get report that a region is CLOSED or SPLIT because a heartbeat<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>              // came in at about same time as a region transition. Make sure there is some<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>              // elapsed time between killing remote server.<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>              throw new UnexpectedStateException(regionNode.toString() +<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>                " reported an unexpected OPEN; time since last update=" + diff);<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>            }<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>          }<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>        } finally {<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>          regionNode.unlock();<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>    } catch (IOException e) {<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>      //See HBASE-21421, we can count on reportRegionStateTransition calls<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      //We only log a warming here. It could be a network lag.<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>      LOG.warn("Failed to checkOnlineRegionsReport, maybe due to network lag, "<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>          + "if this message continues, be careful of double assign", e);<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    }<a name="line.1103"></a>
+<span class="sourceLineNo">982</span>   * The master will call this method when the RS send the regionServerReport(). The report will<a name="line.982"></a>
+<span class="sourceLineNo">983</span>   * contains the "online regions". This method will check the the online regions against the<a name="line.983"></a>
+<span class="sourceLineNo">984</span>   * in-memory state of the AM, and we will log a warn message if there is a mismatch. This is<a name="line.984"></a>
+<span class="sourceLineNo">985</span>   * because that there is no fencing between the reportRegionStateTransition method and<a name="line.985"></a>
+<span class="sourceLineNo">986</span>   * regionServerReport method, so there could be race and introduce inconsistency here, but<a name="line.986"></a>
+<span class="sourceLineNo">987</span>   * actually there is no problem.<a name="line.987"></a>
+<span class="sourceLineNo">988</span>   * &lt;p/&gt;<a name="line.988"></a>
+<span class="sourceLineNo">989</span>   * Please see HBASE-21421 and HBASE-21463 for more details.<a name="line.989"></a>
+<span class="sourceLineNo">990</span>   */<a name="line.990"></a>
+<span class="sourceLineNo">991</span>  public void reportOnlineRegions(ServerName serverName, Set&lt;byte[]&gt; regionNames) {<a name="line.991"></a>
+<span class="sourceLineNo">992</span>    if (!isRunning()) {<a name="line.992"></a>
+<span class="sourceLineNo">993</span>      return;<a name="line.993"></a>
+<span class="sourceLineNo">994</span>    }<a name="line.994"></a>
+<span class="sourceLineNo">995</span>    if (LOG.isTraceEnabled()) {<a name="line.995"></a>
+<span class="sourceLineNo">996</span>      LOG.trace("ReportOnlineRegions {} regionCount={}, metaLoaded={} {}", serverName,<a name="line.996"></a>
+<span class="sourceLineNo">997</span>        regionNames.size(), isMetaLoaded(),<a name="line.997"></a>
+<span class="sourceLineNo">998</span>        regionNames.stream().map(Bytes::toStringBinary).collect(Collectors.toList()));<a name="line.998"></a>
+<span class="sourceLineNo">999</span>    }<a name="line.999"></a>
+<span class="sourceLineNo">1000</span><a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>    ServerStateNode serverNode = regionStates.getOrCreateServer(serverName);<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span><a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>    synchronized (serverNode) {<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>      if (!serverNode.isInState(ServerState.ONLINE)) {<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>        LOG.warn("Got a report from a server result in state " + serverNode.getState());<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>        return;<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>      }<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>    }<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>    if (regionNames.isEmpty()) {<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>      // nothing to do if we don't have regions<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>      LOG.trace("no online region found on {}", serverName);<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>      return;<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>    }<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>    if (!isMetaLoaded()) {<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>      // we are still on startup, skip checking<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>      return;<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>    }<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>    // The Heartbeat tells us of what regions are on the region serve, check the state.<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>    checkOnlineRegionsReport(serverNode, regionNames);<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span><a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>    // wake report event<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>    wakeServerReportEvent(serverNode);<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>  }<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span><a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>  // just check and output possible inconsistency, without actually doing anything<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>  private void checkOnlineRegionsReport(ServerStateNode serverNode, Set&lt;byte[]&gt; regionNames) {<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>    ServerName serverName = serverNode.getServerName();<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>    for (byte[] regionName : regionNames) {<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>      if (!isRunning()) {<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>        return;<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>      }<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      RegionStateNode regionNode = regionStates.getRegionStateNodeFromName(regionName);<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>      if (regionNode == null) {<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>        LOG.warn("No region state node for {}, it should already be on {}",<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>          Bytes.toStringBinary(regionName), serverName);<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>        continue;<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>      }<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>      regionNode.lock();<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>      try {<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>        long diff = EnvironmentEdgeManager.currentTime() - regionNode.getLastUpdate();<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>        if (regionNode.isInState(State.OPENING, State.OPEN)) {<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>          // This is possible as a region server has just closed a region but the region server<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>          // report is generated before the closing, but arrive after the closing. Make sure there<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>          // is some elapsed time so less false alarms.<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>          if (!regionNode.getRegionLocation().equals(serverName) &amp;&amp; diff &gt; 1000) {<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>            LOG.warn("{} reported OPEN on server={} but state has otherwise", regionNode,<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>              serverName);<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>          }<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>        } else if (!regionNode.isInState(State.CLOSING, State.SPLITTING)) {<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>          // So, we can get report that a region is CLOSED or SPLIT because a heartbeat<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>          // came in at about same time as a region transition. Make sure there is some<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>          // elapsed time so less false alarms.<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>          if (diff &gt; 1000) {<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>            LOG.warn("{} reported an unexpected OPEN on {}; time since last update={}ms",<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>              regionNode, serverName, diff);<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>          }<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>        }<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>      } finally {<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>        regionNode.unlock();<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>      }<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    }<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>  }<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span><a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>  protected boolean waitServerReportEvent(ServerName serverName, Procedure&lt;?&gt; proc) {<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>    final ServerStateNode serverNode = regionStates.getOrCreateServer(serverName);<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    if (serverNode == null) {<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>      LOG.warn("serverName=null; {}", proc);<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>    }<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>    return serverNode.getReportEvent().suspendIfNotReady(proc);<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>  }<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span><a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>  protected void wakeServerReportEvent(final ServerStateNode serverNode) {<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>    serverNode.getReportEvent().wake(getProcedureScheduler());<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>  }<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span><a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>  // ============================================================================================<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>  //  RIT chore<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>  // ============================================================================================<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>  private static class RegionInTransitionChore extends ProcedureInMemoryChore&lt;MasterProcedureEnv&gt; {<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>    public RegionInTransitionChore(final int timeoutMsec) {<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      super(timeoutMsec);<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>    }<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span><a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>    @Override<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    protected void periodicExecute(final MasterProcedureEnv env) {<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>      final AssignmentManager am = env.getAssignmentManager();<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span><a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      final RegionInTransitionStat ritStat = am.computeRegionInTransitionStat();<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>      if (ritStat.hasRegionsOverThreshold()) {<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>        for (RegionState hri: ritStat.getRegionOverThreshold()) {<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>          am.handleRegionOverStuckWarningThreshold(hri.getRegion());<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>        }<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>      }<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span><a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>      // update metrics<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>      am.updateRegionsInTransitionMetrics(ritStat);<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>    }<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>  public RegionInTransitionStat computeRegionInTransitionStat() {<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>    final RegionInTransitionStat rit = new RegionInTransitionStat(getConfiguration());<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>    rit.update(this);<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>    return rit;<a name="line.1103"></a>
 <span class="sourceLineNo">1104</span>  }<a name="line.1104"></a>
 <span class="sourceLineNo">1105</span><a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>  protected boolean waitServerReportEvent(ServerName serverName, Procedure&lt;?&gt; proc) {<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    final ServerStateNode serverNode = regionStates.getOrCreateServer(serverName);<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    if (serverNode == null) {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      LOG.warn("serverName=null; {}", proc);<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    }<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>    return serverNode.getReportEvent().suspendIfNotReady(proc);<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>  }<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span><a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>  protected void wakeServerReportEvent(final ServerStateNode serverNode) {<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>    serverNode.getReportEvent().wake(getProcedureScheduler());<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>  }<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span><a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>  // ============================================================================================<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>  //  RIT chore<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>  // ============================================================================================<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>  private static class RegionInTransitionChore extends ProcedureInMemoryChore&lt;MasterProcedureEnv&gt; {<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>    public RegionInTransitionChore(final int timeoutMsec) {<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>      super(timeoutMsec);<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>    }<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span><a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>    @Override<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    protected void periodicExecute(final MasterProcedureEnv env) {<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>      final AssignmentManager am = env.getAssignmentManager();<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span><a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>      final RegionInTransitionStat ritStat = am.computeRegionInTransitionStat();<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>      if (ritStat.hasRegionsOverThreshold()) {<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>        for (RegionState hri: ritStat.getRegionOverThreshold()) {<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>          am.handleRegionOverStuckWarningThreshold(hri.getRegion());<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>        }<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>      }<a name="line.1135"></a>
+<span class="sourceLineNo">1106</span>  public static class RegionInTransitionStat {<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>    private final int ritThreshold;<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span><a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>    private HashMap&lt;String, RegionState&gt; ritsOverThreshold = null;<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>    private long statTimestamp;<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>    private long oldestRITTime = 0;<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>    private int totalRITsTwiceThreshold = 0;<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>    private int totalRITs = 0;<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span><a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>    @VisibleForTesting<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>    public RegionInTransitionStat(final Configuration conf) {<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>      this.ritThreshold =<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>        conf.getInt(METRICS_RIT_STUCK_WARNING_THRESHOLD, DEFAULT_RIT_STUCK_WARNING_THRESHOLD);<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>    }<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span><a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>    public int getRITThreshold() {<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>      return ritThreshold;<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>    }<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span><a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>    public long getTimestamp() {<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>      return statTimestamp;<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>    }<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span><a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>    public int getTotalRITs() {<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>      return totalRITs;<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>    public long getOldestRITTime() {<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>      return oldestRITTime;<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>    }<a name="line.1135"></a>
 <span class="sourceLineNo">1136</span><a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>      // update metrics<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>      am.updateRegionsInTransitionMetrics(ritStat);<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>    }<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>  }<a name="line.1140"></a>
+<span class="sourceLineNo">1137</span>    public int getTotalRITsOverThreshold() {<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>      return m != null ? m.size() : 0;<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>    }<a name="line.1140"></a>
 <span class="sourceLineNo">1141</span><a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>  public RegionInTransitionStat computeRegionInTransitionStat() {<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    final RegionInTransitionStat rit = new RegionInTransitionStat(getConfiguration());<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>    rit.update(this);<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>    return rit;<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>  public static class RegionInTransitionStat {<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    private final int ritThreshold;<a name="line.1149"></a>
+<span class="sourceLineNo">1142</span>    public boolean hasRegionsTwiceOverThreshold() {<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>      return totalRITsTwiceThreshold &gt; 0;<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>    public boolean hasRegionsOverThreshold() {<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>      return m != null &amp;&amp; !m.isEmpty();<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>    }<a name="line.1149"></a>
 <span class="sourceLineNo">1150</span><a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    private HashMap&lt;String, RegionState&gt; ritsOverThreshold = null;<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>    private long statTimestamp;<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>    private long oldestRITTime = 0;<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>    private int totalRITsTwiceThreshold = 0;<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>    private int totalRITs = 0;<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span><a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    @VisibleForTesting<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>    public RegionInTransitionStat(final Configuration conf) {<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>      this.ritThreshold =<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>        conf.getInt(METRICS_RIT_STUCK_WARNING_THRESHOLD, DEFAULT_RIT_STUCK_WARNING_THRESHOLD);<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    }<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span><a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>    public int getRITThreshold() {<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      return ritThreshold;<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    }<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span><a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>    public long getTimestamp() {<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>      return statTimestamp;<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    }<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span><a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    public int getTotalRITs() {<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>      return totalRITs;<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    }<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span><a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    public long getOldestRITTime() {<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>      return oldestRITTime;<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    }<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span><a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    public int getTotalRITsOverThreshold() {<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>      return m != null ? m.size() : 0;<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>    }<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span><a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>    public boolean hasRegionsTwiceOverThreshold() {<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>      return totalRITsTwiceThreshold &gt; 0;<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    }<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span><a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>    public boolean hasRegionsOverThreshold() {<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>      return m != null &amp;&amp; !m.isEmpty();<a name="line.1190"></a>
+<span class="sourceLineNo">1151</span>    public Collection&lt;RegionState&gt; getRegionOverThreshold() {<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>      return m != null? m.values(): Collections.emptySet();<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>    }<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span><a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>    public boolean isRegionOverThreshold(final RegionInfo regionInfo) {<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>      return m != null &amp;&amp; m.containsKey(regionInfo.getEncodedName());<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>    }<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span><a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>    public boolean isRegionTwiceOverThreshold(final RegionInfo regionInfo) {<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>      if (m == null) return false;<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>      final RegionState state = m.get(regionInfo.getEncodedName());<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>      if (state == null) return false;<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>      return (statTimestamp - state.getStamp()) &gt; (ritThreshold * 2);<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>    }<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span><a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>    protected void update(final AssignmentManager am) {<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>      final RegionStates regionStates = am.getRegionStates();<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>      this.statTimestamp = EnvironmentEdgeManager.currentTime();<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>      update(regionStates.getRegionsStateInTransition(), statTimestamp);<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>      update(regionStates.getRegionFailedOpen(), statTimestamp);<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>    }<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span><a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>    private void update(final Collection&lt;RegionState&gt; regions, final long currentTime) {<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>      for (RegionState state: regions) {<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>        totalRITs++;<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>        final long ritTime = currentTime - state.getStamp();<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>        if (ritTime &gt; ritThreshold) {<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>          if (ritsOverThreshold == null) {<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>            ritsOverThreshold = new HashMap&lt;String, RegionState&gt;();<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>          }<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>          ritsOverThreshold.put(state.getRegion().getEncodedName(), state);<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>          totalRITsTwiceThreshold += (ritTime &gt; (ritThreshold * 2)) ? 1 : 0;<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>        }<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>        if (oldestRITTime &lt; ritTime) {<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>          oldestRITTime = ritTime;<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>        }<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>      }<a name="line.1190"></a>
 <span class="sourceLineNo">1191</span>    }<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span><a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>    public Collection&lt;RegionState&gt; getRegionOverThreshold() {<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      return m != null? m.values(): Collections.emptySet();<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>    }<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span><a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>    public boolean isRegionOverThreshold(final RegionInfo regionInfo) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>      return m != null &amp;&amp; m.containsKey(regionInfo.getEncodedName());<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>    }<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span><a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>    public boolean isRegionTwiceOverThreshold(final RegionInfo regionInfo) {<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>      if (m == null) return false;<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>      final RegionState state = m.get(regionInfo.getEncodedName());<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>      if (state == null) return false;<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>      return (statTimestamp - state.getStamp()) &gt; (ritThreshold * 2);<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>    }<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span><a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>    protected void update(final AssignmentManager am) {<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>      final RegionStates regionStates = am.getRegionStates();<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>      this.statTimestamp = EnvironmentEdgeManager.currentTime();<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>      update(regionStates.getRegionsStateInTransition(), statTimestamp);<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>      update(regionStates.getRegionFailedOpen(), statTimestamp);<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>    }<a name="line.1216"></a>
+<span class="sourceLineNo">1192</span>  }<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span><a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>  private void updateRegionsInTransitionMetrics(final RegionInTransitionStat ritStat) {<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>    metrics.updateRITOldestAge(ritStat.getOldestRITTime());<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>    metrics.updateRITCount(ritStat.getTotalRITs());<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    metrics.updateRITCountOverThreshold(ritStat.getTotalRITsOverThreshold());<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>  }<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span><a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>  private void handleRegionOverStuckWarningThreshold(final RegionInfo regionInfo) {<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>    final RegionStateNode regionNode = regionStates.getRegionStateNode(regionInfo);<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    //if (regionNode.isStuck()) {<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>    LOG.warn("STUCK Region-In-Transition {}", regionNode);<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>  }<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span><a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>  // ============================================================================================<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>  //  TODO: Master load/bootstrap<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>  // ============================================================================================<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>  public void joinCluster() throws IOException {<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>    long startTime = System.nanoTime();<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>    LOG.debug("Joining cluster...");<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span><a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>    // Scan hbase:meta to build list of existing regions, servers, and assignment.<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>    // hbase:meta is online now or will be. Inside loadMeta, we keep trying. Can't make progress<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>    // w/o  meta.<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>    loadMeta();<a name="line.1216"></a>
 <span class="sourceLineNo">1217</span><a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>    private void update(final Collection&lt;RegionState&gt; regions, final long currentTime) {<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>      for (RegionState state: regions) {<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>        totalRITs++;<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>        final long ritTime = currentTime - state.getStamp();<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>        if (ritTime &gt; ritThreshold) {<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>          if (ritsOverThreshold == null) {<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>            ritsOverThreshold = new HashMap&lt;String, RegionState&gt;();<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>          }<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>          ritsOverThreshold.put(state.getRegion().getEncodedName(), state);<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>          totalRITsTwiceThreshold += (ritTime &gt; (ritThreshold * 2)) ? 1 : 0;<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>        }<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>        if (oldestRITTime &lt; ritTime) {<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>          oldestRITTime = ritTime;<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>        }<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>      }<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>    }<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>  }<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span><a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>  private void updateRegionsInTransitionMetrics(final RegionInTransitionStat ritStat) {<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>    metrics.updateRITOldestAge(ritStat.getOldestRITTime());<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>    metrics.updateRITCount(ritStat.getTotalRITs());<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>    metrics.updateRITCountOverThreshold(ritStat.getTotalRITsOverThreshold());<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>  }<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span><a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>  private void handleRegionOverStuckWarningThreshold(final RegionInfo regionInfo) {<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>    final RegionStateNode regionNode = regionStates.getRegionStateNode(regionInfo);<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>    //if (regionNode.isStuck()) {<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>    LOG.warn("STUCK Region-In-Transition {}", regionNode);<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>  }<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span><a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>  // ============================================================================================<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>  //  TODO: Master load/bootstrap<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>  // ============================================================================================<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>  public void joinCluster() throws IOException {<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    long startTime = System.nanoTime();<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>    LOG.debug("Joining cluster...");<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span><a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>    // Scan hbase:meta to build list of existing regions, servers, and assignment.<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>    // hbase:meta is online now or will be. Inside loadMeta, we keep trying. Can't make progress<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>    // w/o  meta.<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>    loadMeta();<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span><a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>    while (master.getServerManager().countOfRegionServers() &lt; 1) {<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>      LOG.info("Waiting for RegionServers to join; current count={}",<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>        master.getServerManager().countOfRegionServers());<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      Threads.sleep(250);<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>    }<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>    LOG.info("Number of RegionServers={}", master.getServerManager().countOfRegionServers());<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span><a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>    // Start the RIT chore<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>    master.getMasterProcedureExecutor().addChore(this.ritChore);<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span><a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>    long costMs = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startTime);<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>    LOG.info("Joined the cluster in {}", StringUtils.humanTimeDiff(costMs));<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>  }<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span><a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>  /**<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>   * Create assign procedure for offline regions.<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>   * Just follow the old processofflineServersWithOnlineRegions method. Since now we do not need to<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>   * deal with dead server any more, we only deal with the regions in OFFLINE state in this method.<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>   * And this is a bit strange, that for new regions, we will add it in CLOSED state instead of<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>   * OFFLINE state, and usually there will be a procedure to track them. The<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>   * processofflineServersWithOnlineRegions is a legacy from long ago, as things are going really<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>   * different now, maybe we do not need this method any more. Need to revisit later.<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>   */<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>  // Public so can be run by the Master as part of the startup. Needs hbase:meta to be online.<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>  // Needs to be done after the table state manager has been started.<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>  public void processOfflineRegions() {<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>    List&lt;RegionInfo&gt; offlineRegions = regionStates.getRegionStates().stream()<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>      .filter(RegionState::isOffline).filter(s -&gt; isTableEnabled(s.getRegion().getTable()))<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>      .map(RegionState::getRegion).collect(Collectors.toList());<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>    if (!offlineRegions.isEmpty()) {<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>      master.getMasterProcedureExecutor().submitProcedures(<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>        master.getAssignmentManager().createRoundRobinAssignProcedures(offlineRegions));<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>    }<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>  }<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span><a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>  private void loadMeta() throws IOException {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>    // TODO: use a thread pool<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>    regionStateStore.visitMeta(new RegionStateStore.RegionStateVisitor() {<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>      @Override<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>      public void visitRegionState(Result result, final RegionInfo regionInfo, final State state,<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>          final ServerName regionLocation, final ServerName lastHost, final long openSeqNum) {<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>        if (state == null &amp;&amp; regionLocation == null &amp;&amp; lastHost == null &amp;&amp;<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>            openSeqNum == SequenceId.NO_SEQUENCE_ID) {<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>          // This is a row with nothing in it.<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>          LOG.warn("Skipping empty row={}", result);<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>          return;<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>        }<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>        State localState = state;<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>        if (localState == null) {<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>          // No region state column data in hbase:meta table! Are I doing a rolling upgrade from<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>          // hbase1 to hbase2? Am I restoring a SNAPSHOT or otherwise adding a region to hbase:meta?<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>          // In any of these cases, state is empty. For now, presume OFFLINE but there are probably<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>          // cases where we need to probe more to be sure this correct; TODO informed by experience.<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>          LOG.info(regionInfo.getEncodedName() + " regionState=null; presuming " + State.OFFLINE);<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span><a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>          localState = State.OFFLINE;<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>        }<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>        RegionStateNode regionNode = regionStates.getOrCreateRegionStateNode(regionInfo);<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>        // Do not need to lock on regionNode, as we can make sure that before we finish loading<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>        // meta, all the related procedures can not be executed. The only exception is formeta<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>        // region related operations, but here we do not load the informations for meta region.<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>        regionNode.setState(localState);<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>        regionNode.setLastHost(lastHost);<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>        regionNode.setRegionLocation(regionLocation);<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>        regionNode.setOpenSeqNum(openSeqNum);<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span><a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>        if (localState == State.OPEN) {<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>          assert regionLocation != null : "found null region location for " + regionNode;<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>          regionStates.addRegionToServer(regionNode);<a name="line.1328"></a>
-<span class="sourceLineNo">1329</spa

<TRUNCATED>

[02/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html
new file mode 100644
index 0000000..2801fe4
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html
@@ -0,0 +1,260 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master.assignment;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import static org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED_VALUE;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertEquals;<a name="line.21"></a>
+<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.Set;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.concurrent.CountDownLatch;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.concurrent.Future;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.conf.Configuration;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HConstants;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.ServerName;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.TableName;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.client.Put;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.client.Table;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.util.IdLock;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.zookeeper.KeeperException;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.junit.AfterClass;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.junit.BeforeClass;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.junit.ClassRule;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.junit.Test;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.junit.experimental.categories.Category;<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse;<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>@Category({ MasterTests.class, MediumTests.class })<a name="line.57"></a>
+<span class="sourceLineNo">058</span>public class TestReportOnlineRegionsRace {<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  @ClassRule<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    HBaseClassTestRule.forClass(TestReportOnlineRegionsRace.class);<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private static volatile CountDownLatch ARRIVE_RS_REPORT;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private static volatile CountDownLatch RESUME_RS_REPORT;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private static volatile CountDownLatch FINISH_RS_REPORT;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private static volatile CountDownLatch RESUME_REPORT_STATE;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private static final class AssignmentManagerForTest extends AssignmentManager {<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>    public AssignmentManagerForTest(MasterServices master) {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      super(master);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    }<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>    @Override<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    public void reportOnlineRegions(ServerName serverName, Set&lt;byte[]&gt; regionNames) {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      if (ARRIVE_RS_REPORT != null) {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>        ARRIVE_RS_REPORT.countDown();<a name="line.79"></a>
+<span class="sourceLineNo">080</span>        try {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>          RESUME_RS_REPORT.await();<a name="line.81"></a>
+<span class="sourceLineNo">082</span>        } catch (InterruptedException e) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>          throw new RuntimeException(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>      super.reportOnlineRegions(serverName, regionNames);<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      if (FINISH_RS_REPORT != null) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>        FINISH_RS_REPORT.countDown();<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>    @Override<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    public ReportRegionStateTransitionResponse reportRegionStateTransition(<a name="line.93"></a>
+<span class="sourceLineNo">094</span>        ReportRegionStateTransitionRequest req) throws PleaseHoldException {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      if (RESUME_REPORT_STATE != null) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>        try {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>          RESUME_REPORT_STATE.await();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>        } catch (InterruptedException e) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>          throw new RuntimeException(e);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>        }<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      }<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      return super.reportRegionStateTransition(req);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    }<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  }<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>  public static final class HMasterForTest extends HMaster {<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>    public HMasterForTest(Configuration conf) throws IOException, KeeperException {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      super(conf);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    }<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>    @Override<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    protected AssignmentManager createAssignmentManager(MasterServices master) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      return new AssignmentManagerForTest(master);<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>  private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  private static TableName NAME = TableName.valueOf("Race");<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private static byte[] CF = Bytes.toBytes("cf");<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span>  @BeforeClass<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  public static void setUp() throws Exception {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    UTIL.getConfiguration().setClass(HConstants.MASTER_IMPL, HMasterForTest.class, HMaster.class);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    UTIL.getConfiguration().setInt("hbase.regionserver.msginterval", 1000);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    UTIL.startMiniCluster(1);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    UTIL.createTable(NAME, CF);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    UTIL.waitTableAvailable(NAME);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  }<a name="line.132"></a>
+<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">134</span>  @AfterClass<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  public static void tearDown() throws Exception {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    UTIL.shutdownMiniCluster();<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  }<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>  @Test<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  public void testRace() throws Exception {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    RegionInfo region = UTIL.getMiniHBaseCluster().getRegions(NAME).get(0).getRegionInfo();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec =<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      UTIL.getMiniHBaseCluster().getMaster().getMasterProcedureExecutor();<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    AssignmentManager am = UTIL.getMiniHBaseCluster().getMaster().getAssignmentManager();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    RegionStateNode rsn = am.getRegionStates().getRegionStateNode(region);<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>    // halt a regionServerReport<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    RESUME_RS_REPORT = new CountDownLatch(1);<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    ARRIVE_RS_REPORT = new CountDownLatch(1);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    FINISH_RS_REPORT = new CountDownLatch(1);<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>    ARRIVE_RS_REPORT.await();<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>    // schedule a TRSP to REOPEN the region<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    RESUME_REPORT_STATE = new CountDownLatch(1);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    Future&lt;byte[]&gt; future =<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      am.moveAsync(new RegionPlan(region, rsn.getRegionLocation(), rsn.getRegionLocation()));<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    TransitRegionStateProcedure proc =<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      procExec.getProcedures().stream().filter(p -&gt; p instanceof TransitRegionStateProcedure)<a name="line.159"></a>
+<span class="sourceLineNo">160</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p).findAny().get();<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    IdLock procExecLock = procExec.getProcExecutionLock();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // a CloseRegionProcedure and then the OpenRegionProcedure we want to block<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    IdLock.Entry lockEntry = procExecLock.getLockEntry(proc.getProcId() + 2);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    // resume the reportRegionStateTransition to finish the CloseRegionProcedure<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    RESUME_REPORT_STATE.countDown();<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    // wait until we schedule the OpenRegionProcedure<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    UTIL.waitFor(10000,<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      () -&gt; proc.getCurrentStateId() == REGION_STATE_TRANSITION_CONFIRM_OPENED_VALUE);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    // the region should be in OPENING state<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    assertEquals(RegionState.State.OPENING, rsn.getState());<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    // resume the region server report<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    RESUME_RS_REPORT.countDown();<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    // wait until it finishes, it will find that the region is opened on the rs<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    FINISH_RS_REPORT.await();<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    // let the OpenRegionProcedure go<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    procExecLock.releaseLockEntry(lockEntry);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    // wait until the TRSP is done<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    future.get();<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span>    // confirm that the region can still be write, i.e, the regionServerReport method should not<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    // change the region state to OPEN<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    try (Table table = UTIL.getConnection().getTableBuilder(NAME, null).setWriteRpcTimeout(1000)<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      .setOperationTimeout(2000).build()) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      table.put(<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        new Put(Bytes.toBytes("key")).addColumn(CF, Bytes.toBytes("cq"), Bytes.toBytes("val")));<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    }<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>}<a name="line.188"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html
new file mode 100644
index 0000000..2801fe4
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html
@@ -0,0 +1,260 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master.assignment;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import static org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED_VALUE;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertEquals;<a name="line.21"></a>
+<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.Set;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.concurrent.CountDownLatch;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.concurrent.Future;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.conf.Configuration;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HConstants;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.ServerName;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.TableName;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.client.Put;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.client.Table;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.util.IdLock;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.zookeeper.KeeperException;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.junit.AfterClass;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.junit.BeforeClass;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.junit.ClassRule;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.junit.Test;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.junit.experimental.categories.Category;<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse;<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>@Category({ MasterTests.class, MediumTests.class })<a name="line.57"></a>
+<span class="sourceLineNo">058</span>public class TestReportOnlineRegionsRace {<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  @ClassRule<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    HBaseClassTestRule.forClass(TestReportOnlineRegionsRace.class);<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private static volatile CountDownLatch ARRIVE_RS_REPORT;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private static volatile CountDownLatch RESUME_RS_REPORT;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private static volatile CountDownLatch FINISH_RS_REPORT;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private static volatile CountDownLatch RESUME_REPORT_STATE;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private static final class AssignmentManagerForTest extends AssignmentManager {<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>    public AssignmentManagerForTest(MasterServices master) {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      super(master);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    }<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>    @Override<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    public void reportOnlineRegions(ServerName serverName, Set&lt;byte[]&gt; regionNames) {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      if (ARRIVE_RS_REPORT != null) {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>        ARRIVE_RS_REPORT.countDown();<a name="line.79"></a>
+<span class="sourceLineNo">080</span>        try {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>          RESUME_RS_REPORT.await();<a name="line.81"></a>
+<span class="sourceLineNo">082</span>        } catch (InterruptedException e) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>          throw new RuntimeException(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>      super.reportOnlineRegions(serverName, regionNames);<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      if (FINISH_RS_REPORT != null) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>        FINISH_RS_REPORT.countDown();<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>    @Override<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    public ReportRegionStateTransitionResponse reportRegionStateTransition(<a name="line.93"></a>
+<span class="sourceLineNo">094</span>        ReportRegionStateTransitionRequest req) throws PleaseHoldException {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      if (RESUME_REPORT_STATE != null) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>        try {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>          RESUME_REPORT_STATE.await();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>        } catch (InterruptedException e) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>          throw new RuntimeException(e);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>        }<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      }<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      return super.reportRegionStateTransition(req);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    }<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  }<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>  public static final class HMasterForTest extends HMaster {<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>    public HMasterForTest(Configuration conf) throws IOException, KeeperException {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      super(conf);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    }<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>    @Override<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    protected AssignmentManager createAssignmentManager(MasterServices master) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      return new AssignmentManagerForTest(master);<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>  private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  private static TableName NAME = TableName.valueOf("Race");<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private static byte[] CF = Bytes.toBytes("cf");<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span>  @BeforeClass<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  public static void setUp() throws Exception {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    UTIL.getConfiguration().setClass(HConstants.MASTER_IMPL, HMasterForTest.class, HMaster.class);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    UTIL.getConfiguration().setInt("hbase.regionserver.msginterval", 1000);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    UTIL.startMiniCluster(1);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    UTIL.createTable(NAME, CF);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    UTIL.waitTableAvailable(NAME);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  }<a name="line.132"></a>
+<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">134</span>  @AfterClass<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  public static void tearDown() throws Exception {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    UTIL.shutdownMiniCluster();<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  }<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>  @Test<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  public void testRace() throws Exception {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    RegionInfo region = UTIL.getMiniHBaseCluster().getRegions(NAME).get(0).getRegionInfo();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec =<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      UTIL.getMiniHBaseCluster().getMaster().getMasterProcedureExecutor();<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    AssignmentManager am = UTIL.getMiniHBaseCluster().getMaster().getAssignmentManager();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    RegionStateNode rsn = am.getRegionStates().getRegionStateNode(region);<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>    // halt a regionServerReport<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    RESUME_RS_REPORT = new CountDownLatch(1);<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    ARRIVE_RS_REPORT = new CountDownLatch(1);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    FINISH_RS_REPORT = new CountDownLatch(1);<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>    ARRIVE_RS_REPORT.await();<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>    // schedule a TRSP to REOPEN the region<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    RESUME_REPORT_STATE = new CountDownLatch(1);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    Future&lt;byte[]&gt; future =<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      am.moveAsync(new RegionPlan(region, rsn.getRegionLocation(), rsn.getRegionLocation()));<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    TransitRegionStateProcedure proc =<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      procExec.getProcedures().stream().filter(p -&gt; p instanceof TransitRegionStateProcedure)<a name="line.159"></a>
+<span class="sourceLineNo">160</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p).findAny().get();<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    IdLock procExecLock = procExec.getProcExecutionLock();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // a CloseRegionProcedure and then the OpenRegionProcedure we want to block<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    IdLock.Entry lockEntry = procExecLock.getLockEntry(proc.getProcId() + 2);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    // resume the reportRegionStateTransition to finish the CloseRegionProcedure<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    RESUME_REPORT_STATE.countDown();<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    // wait until we schedule the OpenRegionProcedure<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    UTIL.waitFor(10000,<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      () -&gt; proc.getCurrentStateId() == REGION_STATE_TRANSITION_CONFIRM_OPENED_VALUE);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    // the region should be in OPENING state<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    assertEquals(RegionState.State.OPENING, rsn.getState());<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    // resume the region server report<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    RESUME_RS_REPORT.countDown();<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    // wait until it finishes, it will find that the region is opened on the rs<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    FINISH_RS_REPORT.await();<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    // let the OpenRegionProcedure go<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    procExecLock.releaseLockEntry(lockEntry);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    // wait until the TRSP is done<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    future.get();<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span>    // confirm that the region can still be write, i.e, the regionServerReport method should not<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    // change the region state to OPEN<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    try (Table table = UTIL.getConnection().getTableBuilder(NAME, null).setWriteRpcTimeout(1000)<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      .setOperationTimeout(2000).build()) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      table.put(<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        new Put(Bytes.toBytes("key")).addColumn(CF, Bytes.toBytes("cq"), Bytes.toBytes("val")));<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    }<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>}<a name="line.188"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html
new file mode 100644
index 0000000..2801fe4
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html
@@ -0,0 +1,260 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master.assignment;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import static org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED_VALUE;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertEquals;<a name="line.21"></a>
+<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.Set;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.concurrent.CountDownLatch;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.concurrent.Future;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.conf.Configuration;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HConstants;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.ServerName;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.TableName;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.client.Put;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.client.Table;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.util.IdLock;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.zookeeper.KeeperException;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.junit.AfterClass;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.junit.BeforeClass;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.junit.ClassRule;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.junit.Test;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.junit.experimental.categories.Category;<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse;<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>@Category({ MasterTests.class, MediumTests.class })<a name="line.57"></a>
+<span class="sourceLineNo">058</span>public class TestReportOnlineRegionsRace {<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  @ClassRule<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    HBaseClassTestRule.forClass(TestReportOnlineRegionsRace.class);<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private static volatile CountDownLatch ARRIVE_RS_REPORT;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private static volatile CountDownLatch RESUME_RS_REPORT;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private static volatile CountDownLatch FINISH_RS_REPORT;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private static volatile CountDownLatch RESUME_REPORT_STATE;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private static final class AssignmentManagerForTest extends AssignmentManager {<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>    public AssignmentManagerForTest(MasterServices master) {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      super(master);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    }<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>    @Override<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    public void reportOnlineRegions(ServerName serverName, Set&lt;byte[]&gt; regionNames) {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      if (ARRIVE_RS_REPORT != null) {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>        ARRIVE_RS_REPORT.countDown();<a name="line.79"></a>
+<span class="sourceLineNo">080</span>        try {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>          RESUME_RS_REPORT.await();<a name="line.81"></a>
+<span class="sourceLineNo">082</span>        } catch (InterruptedException e) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>          throw new RuntimeException(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>      super.reportOnlineRegions(serverName, regionNames);<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      if (FINISH_RS_REPORT != null) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>        FINISH_RS_REPORT.countDown();<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>    @Override<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    public ReportRegionStateTransitionResponse reportRegionStateTransition(<a name="line.93"></a>
+<span class="sourceLineNo">094</span>        ReportRegionStateTransitionRequest req) throws PleaseHoldException {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      if (RESUME_REPORT_STATE != null) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>        try {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>          RESUME_REPORT_STATE.await();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>        } catch (InterruptedException e) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>          throw new RuntimeException(e);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>        }<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      }<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      return super.reportRegionStateTransition(req);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    }<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  }<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>  public static final class HMasterForTest extends HMaster {<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>    public HMasterForTest(Configuration conf) throws IOException, KeeperException {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      super(conf);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    }<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>    @Override<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    protected AssignmentManager createAssignmentManager(MasterServices master) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      return new AssignmentManagerForTest(master);<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>  private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  private static TableName NAME = TableName.valueOf("Race");<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private static byte[] CF = Bytes.toBytes("cf");<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span>  @BeforeClass<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  public static void setUp() throws Exception {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    UTIL.getConfiguration().setClass(HConstants.MASTER_IMPL, HMasterForTest.class, HMaster.class);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    UTIL.getConfiguration().setInt("hbase.regionserver.msginterval", 1000);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    UTIL.startMiniCluster(1);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    UTIL.createTable(NAME, CF);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    UTIL.waitTableAvailable(NAME);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  }<a name="line.132"></a>
+<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">134</span>  @AfterClass<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  public static void tearDown() throws Exception {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    UTIL.shutdownMiniCluster();<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  }<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>  @Test<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  public void testRace() throws Exception {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    RegionInfo region = UTIL.getMiniHBaseCluster().getRegions(NAME).get(0).getRegionInfo();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec =<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      UTIL.getMiniHBaseCluster().getMaster().getMasterProcedureExecutor();<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    AssignmentManager am = UTIL.getMiniHBaseCluster().getMaster().getAssignmentManager();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    RegionStateNode rsn = am.getRegionStates().getRegionStateNode(region);<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>    // halt a regionServerReport<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    RESUME_RS_REPORT = new CountDownLatch(1);<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    ARRIVE_RS_REPORT = new CountDownLatch(1);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    FINISH_RS_REPORT = new CountDownLatch(1);<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>    ARRIVE_RS_REPORT.await();<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>    // schedule a TRSP to REOPEN the region<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    RESUME_REPORT_STATE = new CountDownLatch(1);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    Future&lt;byte[]&gt; future =<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      am.moveAsync(new RegionPlan(region, rsn.getRegionLocation(), rsn.getRegionLocation()));<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    TransitRegionStateProcedure proc =<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      procExec.getProcedures().stream().filter(p -&gt; p instanceof TransitRegionStateProcedure)<a name="line.159"></a>
+<span class="sourceLineNo">160</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p).findAny().get();<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    IdLock procExecLock = procExec.getProcExecutionLock();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // a CloseRegionProcedure and then the OpenRegionProcedure we want to block<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    IdLock.Entry lockEntry = procExecLock.getLockEntry(proc.getProcId() + 2);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    // resume the reportRegionStateTransition to finish the CloseRegionProcedure<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    RESUME_REPORT_STATE.countDown();<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    // wait until we schedule the OpenRegionProcedure<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    UTIL.waitFor(10000,<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      () -&gt; proc.getCurrentStateId() == REGION_STATE_TRANSITION_CONFIRM_OPENED_VALUE);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    // the region should be in OPENING state<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    assertEquals(RegionState.State.OPENING, rsn.getState());<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    // resume the region server report<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    RESUME_RS_REPORT.countDown();<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    // wait until it finishes, it will find that the region is opened on the rs<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    FINISH_RS_REPORT.await();<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    // let the OpenRegionProcedure go<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    procExecLock.releaseLockEntry(lockEntry);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    // wait until the TRSP is done<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    future.get();<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span>    // confirm that the region can still be write, i.e, the regionServerReport method should not<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    // change the region state to OPEN<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    try (Table table = UTIL.getConnection().getTableBuilder(NAME, null).setWriteRpcTimeout(1000)<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      .setOperationTimeout(2000).build()) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      table.put(<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        new Put(Bytes.toBytes("key")).addColumn(CF, Bytes.toBytes("cq"), Bytes.toBytes("val")));<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    }<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>}<a name="line.188"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html
index 542f9de..ae16c06 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html
@@ -36,121 +36,112 @@
 <span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.28"></a>
 <span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.29"></a>
 <span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.junit.Assert;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.junit.ClassRule;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.junit.Rule;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.junit.Test;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.junit.experimental.categories.Category;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.junit.rules.TestName;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.slf4j.Logger;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.slf4j.LoggerFactory;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>@Category({MasterTests.class, MediumTests.class})<a name="line.40"></a>
-<span class="sourceLineNo">041</span>public class TestEnableTableProcedure extends TestTableDDLProcedureBase {<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>  @ClassRule<a name="line.43"></a>
-<span class="sourceLineNo">044</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.44"></a>
-<span class="sourceLineNo">045</span>      HBaseClassTestRule.forClass(TestEnableTableProcedure.class);<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span>  private static final Logger LOG = LoggerFactory.getLogger(TestEnableTableProcedure.class);<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  @Rule public TestName name = new TestName();<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>  @Test<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  public void testEnableTable() throws Exception {<a name="line.51"></a>
-<span class="sourceLineNo">052</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.52"></a>
-<span class="sourceLineNo">053</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>    MasterProcedureTestingUtility.createTable(procExec, tableName, null, "f1", "f2");<a name="line.55"></a>
-<span class="sourceLineNo">056</span>    UTIL.getAdmin().disableTable(tableName);<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>    // Enable the table<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    long procId = procExec.submitProcedure(<a name="line.59"></a>
-<span class="sourceLineNo">060</span>      new EnableTableProcedure(procExec.getEnvironment(), tableName, false));<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    // Wait the completion<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    ProcedureTestingUtility.waitProcedure(procExec, procId);<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    ProcedureTestingUtility.assertProcNotFailed(procExec, procId);<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    MasterProcedureTestingUtility.validateTableIsEnabled(getMaster(), tableName);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  }<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>  @Test(expected=TableNotDisabledException.class)<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  public void testEnableNonDisabledTable() throws Exception {<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>    MasterProcedureTestingUtility.createTable(procExec, tableName, null, "f1", "f2");<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>    // Enable the table - expect failure<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    long procId1 = procExec.submitProcedure(<a name="line.75"></a>
-<span class="sourceLineNo">076</span>        new EnableTableProcedure(procExec.getEnvironment(), tableName, false));<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    ProcedureTestingUtility.waitProcedure(procExec, procId1);<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>    Procedure&lt;?&gt; result = procExec.getResult(procId1);<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    assertTrue(result.isFailed());<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    LOG.debug("Enable failed with exception: " + result.getException());<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    assertTrue(<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      ProcedureTestingUtility.getExceptionCause(result) instanceof TableNotDisabledException);<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>    // Enable the table with skipping table state check flag (simulate recovery scenario)<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    long procId2 = procExec.submitProcedure(<a name="line.86"></a>
-<span class="sourceLineNo">087</span>        new EnableTableProcedure(procExec.getEnvironment(), tableName, true));<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    // Wait the completion<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    ProcedureTestingUtility.waitProcedure(procExec, procId2);<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    ProcedureTestingUtility.assertProcNotFailed(procExec, procId2);<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>    // Enable the table - expect failure from ProcedurePrepareLatch<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    final ProcedurePrepareLatch prepareLatch = new ProcedurePrepareLatch.CompatibilityLatch();<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    procExec.submitProcedure(<a name="line.94"></a>
-<span class="sourceLineNo">095</span>        new EnableTableProcedure(procExec.getEnvironment(), tableName, false, prepareLatch));<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    prepareLatch.await();<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    Assert.fail("Enable should throw exception through latch.");<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>
-<span class="sourceLineNo">100</span>  @Test<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  public void testRecoveryAndDoubleExecution() throws Exception {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>    final byte[][] splitKeys = new byte[][] {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>      Bytes.toBytes("a"), Bytes.toBytes("b"), Bytes.toBytes("c")<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    };<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    MasterProcedureTestingUtility.createTable(procExec, tableName, splitKeys, "f1", "f2");<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    UTIL.getAdmin().disableTable(tableName);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    ProcedureTestingUtility.setKillIfHasParent(procExec, false);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true);<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span>    // Start the Enable procedure &amp;&amp; kill the executor<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    long procId = procExec.submitProcedure(<a name="line.115"></a>
-<span class="sourceLineNo">116</span>        new EnableTableProcedure(procExec.getEnvironment(), tableName, false));<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>    // Restart the executor and execute the step twice<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId);<a name="line.119"></a>
+<span class="sourceLineNo">031</span>import org.junit.ClassRule;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.junit.Rule;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.junit.Test;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.junit.experimental.categories.Category;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.junit.rules.TestName;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.slf4j.Logger;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.slf4j.LoggerFactory;<a name="line.37"></a>
+<span class="sourceLineNo">038</span><a name="line.38"></a>
+<span class="sourceLineNo">039</span>@Category({ MasterTests.class, MediumTests.class })<a name="line.39"></a>
+<span class="sourceLineNo">040</span>public class TestEnableTableProcedure extends TestTableDDLProcedureBase {<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(TestEnableTableProcedure.class);<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span>  private static final Logger LOG = LoggerFactory.getLogger(TestEnableTableProcedure.class);<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>  @Rule<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  public TestName name = new TestName();<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  @Test<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  public void testEnableTable() throws Exception {<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>    MasterProcedureTestingUtility.createTable(procExec, tableName, null, "f1", "f2");<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    UTIL.getAdmin().disableTable(tableName);<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>    // Enable the table<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    long procId =<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      procExec.submitProcedure(new EnableTableProcedure(procExec.getEnvironment(), tableName));<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    // Wait the completion<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    ProcedureTestingUtility.waitProcedure(procExec, procId);<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    ProcedureTestingUtility.assertProcNotFailed(procExec, procId);<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    MasterProcedureTestingUtility.validateTableIsEnabled(getMaster(), tableName);<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  }<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>  @Test(expected = TableNotDisabledException.class)<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  public void testEnableNonDisabledTable() throws Exception {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>    MasterProcedureTestingUtility.createTable(procExec, tableName, null, "f1", "f2");<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>    // Enable the table - expect failure<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    long procId1 =<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      procExec.submitProcedure(new EnableTableProcedure(procExec.getEnvironment(), tableName));<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    ProcedureTestingUtility.waitProcedure(procExec, procId1);<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>    Procedure&lt;?&gt; result = procExec.getResult(procId1);<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    assertTrue(result.isFailed());<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    LOG.debug("Enable failed with exception: " + result.getException());<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    assertTrue(<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      ProcedureTestingUtility.getExceptionCause(result) instanceof TableNotDisabledException);<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>    // Enable the table - expect failure from ProcedurePrepareLatch<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    final ProcedurePrepareLatch prepareLatch = new ProcedurePrepareLatch.CompatibilityLatch();<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    procExec.submitProcedure(<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      new EnableTableProcedure(procExec.getEnvironment(), tableName, prepareLatch));<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    prepareLatch.await();<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  }<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  @Test<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  public void testRecoveryAndDoubleExecution() throws Exception {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>    final byte[][] splitKeys =<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      new byte[][] { Bytes.toBytes("a"), Bytes.toBytes("b"), Bytes.toBytes("c") };<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    MasterProcedureTestingUtility.createTable(procExec, tableName, splitKeys, "f1", "f2");<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    UTIL.getAdmin().disableTable(tableName);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    ProcedureTestingUtility.setKillIfHasParent(procExec, false);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true);<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>    // Start the Enable procedure &amp;&amp; kill the executor<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    long procId =<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      procExec.submitProcedure(new EnableTableProcedure(procExec.getEnvironment(), tableName));<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>    // Restart the executor and execute the step twice<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId);<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>    MasterProcedureTestingUtility.validateTableIsEnabled(getMaster(), tableName);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  }<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  @Test<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  public void testRollbackAndDoubleExecution() throws Exception {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.119"></a>
 <span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>    MasterProcedureTestingUtility.validateTableIsEnabled(getMaster(), tableName);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  }<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>  @Test<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  public void testRollbackAndDoubleExecution() throws Exception {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>    final byte[][] splitKeys = new byte[][] {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      Bytes.toBytes("a"), Bytes.toBytes("b"), Bytes.toBytes("c")<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    };<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    MasterProcedureTestingUtility.createTable(procExec, tableName, splitKeys, "f1", "f2");<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    UTIL.getAdmin().disableTable(tableName);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true);<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>    // Start the Enable procedure &amp;&amp; kill the executor<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    long procId = procExec.submitProcedure(<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        new EnableTableProcedure(procExec.getEnvironment(), tableName, false));<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>    int lastStep = 3; // fail before ENABLE_TABLE_SET_ENABLING_TABLE_STATE<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    MasterProcedureTestingUtility.testRollbackAndDoubleExecution(procExec, procId, lastStep);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    MasterProcedureTestingUtility.validateTableIsDisabled(getMaster(), tableName);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  }<a name="line.144"></a>
-<span class="sourceLineNo">145</span>}<a name="line.145"></a>
+<span class="sourceLineNo">121</span>    final byte[][] splitKeys =<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      new byte[][] { Bytes.toBytes("a"), Bytes.toBytes("b"), Bytes.toBytes("c") };<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    MasterProcedureTestingUtility.createTable(procExec, tableName, splitKeys, "f1", "f2");<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    UTIL.getAdmin().disableTable(tableName);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true);<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // Start the Enable procedure &amp;&amp; kill the executor<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    long procId =<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      procExec.submitProcedure(new EnableTableProcedure(procExec.getEnvironment(), tableName));<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>    int lastStep = 3; // fail before ENABLE_TABLE_SET_ENABLING_TABLE_STATE<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    MasterProcedureTestingUtility.testRollbackAndDoubleExecution(procExec, procId, lastStep);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    MasterProcedureTestingUtility.validateTableIsDisabled(getMaster(), tableName);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  }<a name="line.135"></a>
+<span class="sourceLineNo">136</span>}<a name="line.136"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterFailoverWithProcedures.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterFailoverWithProcedures.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterFailoverWithProcedures.html
index 2125f6d..6763149 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterFailoverWithProcedures.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterFailoverWithProcedures.html
@@ -297,7 +297,7 @@
 <span class="sourceLineNo">289</span><a name="line.289"></a>
 <span class="sourceLineNo">290</span>    // Start the Delete procedure &amp;&amp; kill the executor<a name="line.290"></a>
 <span class="sourceLineNo">291</span>    long procId = procExec.submitProcedure(<a name="line.291"></a>
-<span class="sourceLineNo">292</span>        new EnableTableProcedure(procExec.getEnvironment(), tableName, false));<a name="line.292"></a>
+<span class="sourceLineNo">292</span>        new EnableTableProcedure(procExec.getEnvironment(), tableName));<a name="line.292"></a>
 <span class="sourceLineNo">293</span>    testRecoveryAndDoubleExecution(UTIL, procId, step);<a name="line.293"></a>
 <span class="sourceLineNo">294</span><a name="line.294"></a>
 <span class="sourceLineNo">295</span>    MasterProcedureTestingUtility.validateTableIsEnabled(<a name="line.295"></a>


[23/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
index d6b1076..f1c0a08 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":9,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10,"i78":10,"i79":10,"i80":10,"i81":10,"i82":10,"i83":10,"i84":10,"i85":10,"i86":10,"i87":10,"i88":10,"i89":10,"i90":10,"i91":10,"i92":10,"i93":10,"i94":10,"i95":10,"i96":10,"i97":10,"i98":10,"i99":10,"i100":10,"i101":10,"i102":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":9,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10,"i78":10,"i79":10,"i80":10,"i81":10,"i82":10,"i83":10,"i84":10,"i85":10,"i86":10,"i87":10,"i88":10,"i89":10,"i90":10,"i91":10,"i92":10,"i93":10,"i94":10,"i95":10,"i96":10,"i97":10,"i98":10,"i99":10,"i100":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";
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.103">AssignmentManager</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.102">AssignmentManager</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListener.html" title="interface in org.apache.hadoop.hbase.master">ServerListener</a></pre>
 <div class="block">The AssignmentManager is the coordinator for region assign/unassign operations.
@@ -381,213 +381,208 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 </td>
 </tr>
 <tr id="i7" class="rowColor">
-<td class="colFirst"><code>(package private) void</code></td>
+<td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#checkOnlineRegionsReport-org.apache.hadoop.hbase.master.assignment.ServerStateNode-java.util.Set-">checkOnlineRegionsReport</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">ServerStateNode</a>&nbsp;serverNode,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt;&nbsp;regionNames)</code>&nbsp;</td>
 </tr>
 <tr id="i8" class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#checkOnlineRegionsReportForMeta-org.apache.hadoop.hbase.master.assignment.ServerStateNode-java.util.Set-">checkOnlineRegionsReportForMeta</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">ServerStateNode</a>&nbsp;serverNode,
-                               <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt;&nbsp;regionNames)</code>&nbsp;</td>
-</tr>
-<tr id="i9" class="rowColor">
 <td class="colFirst"><code>(package private) static int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#compare-org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure-org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure-">compare</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;left,
        <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;right)</code>&nbsp;</td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager.RegionInTransitionStat</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#computeRegionInTransitionStat--">computeRegionInTransitionStat</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#createAssignProcedure-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-boolean-">createAssignProcedure</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
                      <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;targetServer,
                      boolean&nbsp;override)</code>&nbsp;</td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#createAssignProcedures-java.util.List-">createAssignProcedures</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;hris)</code>
 <div class="block">Create an array of TransitRegionStateProcedure w/o specifying a target server.</div>
 </td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#createAssignProcedures-java.util.Map-">createAssignProcedures</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&nbsp;assignments)</code>&nbsp;</td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/MergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">MergeTableRegionsProcedure</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#createMergeProcedure-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-">createMergeProcedure</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionToMergeA,
                     <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionToMergeB)</code>&nbsp;</td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#createMoveRegionProcedure-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-">createMoveRegionProcedure</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                          <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;targetServer)</code>&nbsp;</td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#createOneAssignProcedure-org.apache.hadoop.hbase.client.RegionInfo-boolean-">createOneAssignProcedure</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri,
                         boolean&nbsp;override)</code>
 <div class="block">Create one TransitRegionStateProcedure to assign a region w/o specifying a target server.</div>
 </td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#createOneUnassignProcedure-org.apache.hadoop.hbase.client.RegionInfo-boolean-">createOneUnassignProcedure</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri,
                           boolean&nbsp;override)</code>
 <div class="block">Create one TransitRegionStateProcedure to unassign a region.</div>
 </td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#createRoundRobinAssignProcedures-java.util.List-">createRoundRobinAssignProcedures</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;hris)</code>
 <div class="block">Create round-robin assigns.</div>
 </td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#createRoundRobinAssignProcedures-java.util.List-java.util.List-">createRoundRobinAssignProcedures</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;hris,
                                 <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;serversToExclude)</code>
 <div class="block">Create round-robin assigns.</div>
 </td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">SplitTableRegionProcedure</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#createSplitProcedure-org.apache.hadoop.hbase.client.RegionInfo-byte:A-">createSplitProcedure</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionToSplit,
                     byte[]&nbsp;splitKey)</code>&nbsp;</td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#createUnassignProcedure-org.apache.hadoop.hbase.master.assignment.RegionStateNode-boolean-">createUnassignProcedure</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
                        boolean&nbsp;override)</code>&nbsp;</td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#createUnassignProceduresForDisabling-org.apache.hadoop.hbase.TableName-">createUnassignProceduresForDisabling</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Called by DisableTableProcedure to unassign all the regions for a table.</div>
 </td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#deleteTable-org.apache.hadoop.hbase.TableName-">deleteTable</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Delete the region states.</div>
 </td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#getAssignedRegions--">getAssignedRegions</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i25" class="rowColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code>(package private) int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#getAssignMaxAttempts--">getAssignMaxAttempts</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i26" class="altColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/master/MetricsAssignmentManager.html" title="class in org.apache.hadoop.hbase.master">MetricsAssignmentManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#getAssignmentManagerMetrics--">getAssignmentManagerMetrics</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i27" class="rowColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master">LoadBalancer</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#getBalancer--">getBalancer</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i27" class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.conf.Configuration</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#getConfiguration--">getConfiguration</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i28" class="altColor">
 <td class="colFirst"><code><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;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#getExcludedServersForSystemTable--">getExcludedServersForSystemTable</a></span>()</code>
 <div class="block">Get a list of servers that this region cannot be assigned to.</div>
 </td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code><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;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#getFavoredNodes-org.apache.hadoop.hbase.client.RegionInfo-">getFavoredNodes</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</code>&nbsp;</td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#getMaster--">getMaster</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a>&lt;?&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#getMetaAssignEvent-org.apache.hadoop.hbase.client.RegionInfo-">getMetaAssignEvent</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;metaRegionInfo)</code>&nbsp;</td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#getMetaForRegion-org.apache.hadoop.hbase.client.RegionInfo-">getMetaForRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</code>&nbsp;</td>
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#getMetaRegionFromName-byte:A-">getMetaRegionFromName</a></span>(byte[]&nbsp;regionName)</code>&nbsp;</td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#getMetaRegionSet--">getMetaRegionSet</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#getNumRegionsOpened--">getNumRegionsOpened</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i37" class="rowColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#getProcedureEnvironment--">getProcedureEnvironment</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i38" class="altColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureScheduler</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#getProcedureScheduler--">getProcedureScheduler</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i39" class="rowColor">
+<tr id="i38" class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#getRegionInfo-byte:A-">getRegionInfo</a></span>(byte[]&nbsp;regionName)</code>&nbsp;</td>
 </tr>
-<tr id="i40" class="altColor">
+<tr id="i39" class="rowColor">
 <td class="colFirst"><code><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/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#getRegionsInTransition--">getRegionsInTransition</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i41" class="rowColor">
+<tr id="i40" class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#getRegionStates--">getRegionStates</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i42" class="altColor">
+<tr id="i41" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateStore.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateStore</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#getRegionStateStore--">getRegionStateStore</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i43" class="rowColor">
+<tr id="i42" class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#getReopenStatus-org.apache.hadoop.hbase.TableName-">getReopenStatus</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Used by the client (via master) to identify if all regions have the schema updates</div>
 </td>
 </tr>
-<tr id="i44" class="altColor">
+<tr id="i43" class="rowColor">
 <td class="colFirst"><code><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="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#getSnapShotOfAssignment-java.util.Collection-">getSnapShotOfAssignment</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regions)</code>&nbsp;</td>
 </tr>
-<tr id="i45" class="rowColor">
+<tr id="i44" class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#getSystemTables-org.apache.hadoop.hbase.ServerName-">getSystemTables</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>&nbsp;</td>
 </tr>
-<tr id="i46" class="altColor">
+<tr id="i45" class="rowColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#getTableStateManager--">getTableStateManager</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i47" class="rowColor">
+<tr id="i46" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#handleRegionOverStuckWarningThreshold-org.apache.hadoop.hbase.client.RegionInfo-">handleRegionOverStuckWarningThreshold</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</code>&nbsp;</td>
 </tr>
-<tr id="i48" class="altColor">
+<tr id="i47" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#hasRegionsInTransition--">hasRegionsInTransition</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i49" class="rowColor">
+<tr id="i48" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#isCarryingMeta-org.apache.hadoop.hbase.ServerName-">isCarryingMeta</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>&nbsp;</td>
 </tr>
-<tr id="i50" class="altColor">
+<tr id="i49" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#isCarryingRegion-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.client.RegionInfo-">isCarryingRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                 <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</code>&nbsp;</td>
 </tr>
-<tr id="i51" class="rowColor">
+<tr id="i50" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#isMetaAssigned--">isMetaAssigned</a></span>()</code>
 <div class="block">Notice that, this only means the meta region is available on a RS, but the AM may still be
@@ -596,49 +591,45 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
  executed after AM builds the region states.</div>
 </td>
 </tr>
-<tr id="i52" class="altColor">
+<tr id="i51" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#isMetaLoaded--">isMetaLoaded</a></span>()</code>
 <div class="block">Return whether AM finishes the meta loading, i.e, the region states rebuilding.</div>
 </td>
 </tr>
-<tr id="i53" class="rowColor">
+<tr id="i52" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#isMetaRegion-byte:A-">isMetaRegion</a></span>(byte[]&nbsp;regionName)</code>&nbsp;</td>
 </tr>
-<tr id="i54" class="altColor">
+<tr id="i53" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#isMetaRegion-org.apache.hadoop.hbase.client.RegionInfo-">isMetaRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</code>&nbsp;</td>
 </tr>
-<tr id="i55" class="rowColor">
+<tr id="i54" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#isMetaRegionInTransition--">isMetaRegionInTransition</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i56" class="altColor">
+<tr id="i55" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#isRunning--">isRunning</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i57" class="rowColor">
+<tr id="i56" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#isTableDisabled-org.apache.hadoop.hbase.TableName-">isTableDisabled</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i58" class="altColor">
+<tr id="i57" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#isTableEnabled-org.apache.hadoop.hbase.TableName-">isTableEnabled</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i59" class="rowColor">
+<tr id="i58" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#joinCluster--">joinCluster</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i60" class="altColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#killRegionServer-org.apache.hadoop.hbase.master.assignment.ServerStateNode-">killRegionServer</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">ServerStateNode</a>&nbsp;serverNode)</code>&nbsp;</td>
-</tr>
-<tr id="i61" class="rowColor">
+<tr id="i59" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#loadMeta--">loadMeta</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i62" class="altColor">
+<tr id="i60" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#markRegionAsMerged-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-">markRegionAsMerged</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;child,
                   <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
@@ -647,157 +638,157 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <div class="block">When called here, the merge has happened.</div>
 </td>
 </tr>
-<tr id="i63" class="rowColor">
+<tr id="i61" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#markRegionAsSplit-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-">markRegionAsSplit</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;parent,
                  <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                  <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;daughterA,
                  <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;daughterB)</code>&nbsp;</td>
 </tr>
-<tr id="i64" class="altColor">
+<tr id="i62" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#move-org.apache.hadoop.hbase.client.RegionInfo-">move</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</code>&nbsp;</td>
 </tr>
-<tr id="i65" class="rowColor">
+<tr id="i63" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;byte[]&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#moveAsync-org.apache.hadoop.hbase.master.RegionPlan-">moveAsync</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&nbsp;regionPlan)</code>&nbsp;</td>
 </tr>
-<tr id="i66" class="altColor">
+<tr id="i64" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#offlineRegion-org.apache.hadoop.hbase.client.RegionInfo-">offlineRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</code>&nbsp;</td>
 </tr>
-<tr id="i67" class="rowColor">
+<tr id="i65" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#onlineRegion-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-">onlineRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
             <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>&nbsp;</td>
 </tr>
-<tr id="i68" class="altColor">
+<tr id="i66" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#preTransitCheck-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.master.RegionState.State:A-">preTransitCheck</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
                <a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>[]&nbsp;expectedStates)</code>&nbsp;</td>
 </tr>
-<tr id="i69" class="rowColor">
+<tr id="i67" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#processAssignmentPlans-java.util.HashMap-java.util.HashMap-java.util.List-java.util.List-">processAssignmentPlans</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&gt;&nbsp;regions,
                       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/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;retainMap,
                       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;hris,
                       <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;servers)</code>&nbsp;</td>
 </tr>
-<tr id="i70" class="altColor">
+<tr id="i68" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#processAssignQueue--">processAssignQueue</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i71" class="rowColor">
+<tr id="i69" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#processOfflineRegions--">processOfflineRegions</a></span>()</code>
 <div class="block">Create assign procedure for offline regions.</div>
 </td>
 </tr>
-<tr id="i72" class="altColor">
+<tr id="i70" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#queueAssign-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">queueAssign</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</code>
 <div class="block">Add the assign operation to the assignment queue.</div>
 </td>
 </tr>
-<tr id="i73" class="rowColor">
+<tr id="i71" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#regionClosed-org.apache.hadoop.hbase.master.assignment.RegionStateNode-boolean-">regionClosed</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
             boolean&nbsp;normally)</code>&nbsp;</td>
 </tr>
-<tr id="i74" class="altColor">
+<tr id="i72" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#regionClosing-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">regionClosing</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</code>&nbsp;</td>
 </tr>
-<tr id="i75" class="rowColor">
+<tr id="i73" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#regionFailedOpen-org.apache.hadoop.hbase.master.assignment.RegionStateNode-boolean-">regionFailedOpen</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
                 boolean&nbsp;giveUp)</code>&nbsp;</td>
 </tr>
-<tr id="i76" class="altColor">
+<tr id="i74" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#regionOpened-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">regionOpened</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</code>&nbsp;</td>
 </tr>
-<tr id="i77" class="rowColor">
+<tr id="i75" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#regionOpening-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">regionOpening</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</code>&nbsp;</td>
 </tr>
-<tr id="i78" class="altColor">
+<tr id="i76" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#reportOnlineRegions-org.apache.hadoop.hbase.ServerName-java.util.Set-">reportOnlineRegions</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                    <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt;&nbsp;regionNames)</code>
-<div class="block">the master will call this method when the RS send the regionServerReport().</div>
+<div class="block">The master will call this method when the RS send the regionServerReport().</div>
 </td>
 </tr>
-<tr id="i79" class="rowColor">
+<tr id="i77" class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#reportRegionStateTransition-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest-">reportRegionStateTransition</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest&nbsp;req)</code>&nbsp;</td>
 </tr>
-<tr id="i80" class="altColor">
+<tr id="i78" class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#reportTransition-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.master.assignment.ServerStateNode-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-long-">reportTransition</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
                 <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">ServerStateNode</a>&nbsp;serverNode,
                 org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;state,
                 long&nbsp;seqId)</code>&nbsp;</td>
 </tr>
-<tr id="i81" class="rowColor">
+<tr id="i79" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#serverAdded-org.apache.hadoop.hbase.ServerName-">serverAdded</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">The server has joined the cluster.</div>
 </td>
 </tr>
-<tr id="i82" class="altColor">
+<tr id="i80" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#serverRemoved-org.apache.hadoop.hbase.ServerName-">serverRemoved</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">The server was removed from the cluster.</div>
 </td>
 </tr>
-<tr id="i83" class="rowColor">
+<tr id="i81" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#setMetaAssigned-org.apache.hadoop.hbase.client.RegionInfo-boolean-">setMetaAssigned</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;metaRegionInfo,
                boolean&nbsp;assigned)</code>&nbsp;</td>
 </tr>
-<tr id="i84" class="altColor">
+<tr id="i82" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#setupRIT-java.util.List-">setupRIT</a></span>(<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/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&gt;&nbsp;procs)</code>
 <div class="block">Create RegionStateNode based on the TRSP list, and attach the TRSP to the RegionStateNode.</div>
 </td>
 </tr>
-<tr id="i85" class="rowColor">
+<tr id="i83" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#shouldAssignFavoredNodes-org.apache.hadoop.hbase.client.RegionInfo-">shouldAssignFavoredNodes</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr id="i86" class="altColor">
+<tr id="i84" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#start--">start</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i87" class="rowColor">
+<tr id="i85" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#startAssignmentThread--">startAssignmentThread</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i88" class="altColor">
+<tr id="i86" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#stop--">stop</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i89" class="rowColor">
+<tr id="i87" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#stopAssignmentThread--">stopAssignmentThread</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i90" class="altColor">
+<tr id="i88" class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#submitServerCrash-org.apache.hadoop.hbase.ServerName-boolean-">submitServerCrash</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                  boolean&nbsp;shouldSplitWal)</code>&nbsp;</td>
 </tr>
-<tr id="i91" class="rowColor">
+<tr id="i89" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#transitStateAndUpdate-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.master.RegionState.State-org.apache.hadoop.hbase.master.RegionState.State...-">transitStateAndUpdate</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
                      <a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>&nbsp;newState,
                      <a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>...&nbsp;expectedStates)</code>&nbsp;</td>
 </tr>
-<tr id="i92" class="altColor">
+<tr id="i90" class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#unassign-org.apache.hadoop.hbase.client.RegionInfo-">unassign</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</code>&nbsp;</td>
 </tr>
-<tr id="i93" class="rowColor">
+<tr id="i91" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#updateRegionMergeTransition-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-">updateRegionMergeTransition</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                            org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;state,
@@ -805,11 +796,11 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
                            <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hriA,
                            <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hriB)</code>&nbsp;</td>
 </tr>
-<tr id="i94" class="altColor">
+<tr id="i92" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#updateRegionsInTransitionMetrics-org.apache.hadoop.hbase.master.assignment.AssignmentManager.RegionInTransitionStat-">updateRegionsInTransitionMetrics</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager.RegionInTransitionStat</a>&nbsp;ritStat)</code>&nbsp;</td>
 </tr>
-<tr id="i95" class="rowColor">
+<tr id="i93" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#updateRegionSplitTransition-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-">updateRegionSplitTransition</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                            org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;state,
@@ -817,40 +808,40 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
                            <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hriA,
                            <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hriB)</code>&nbsp;</td>
 </tr>
-<tr id="i96" class="altColor">
+<tr id="i94" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#updateRegionTransition-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-org.apache.hadoop.hbase.client.RegionInfo-long-">updateRegionTransition</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                       org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;state,
                       <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                       long&nbsp;seqId)</code>&nbsp;</td>
 </tr>
-<tr id="i97" class="rowColor">
+<tr id="i95" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#waitMetaAssigned-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.client.RegionInfo-">waitMetaAssigned</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
                 <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</code>
 <div class="block">Notice that this event does not mean the AM has already finished region state rebuilding.</div>
 </td>
 </tr>
-<tr id="i98" class="altColor">
+<tr id="i96" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#waitMetaLoaded-org.apache.hadoop.hbase.procedure2.Procedure-">waitMetaLoaded</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc)</code>
 <div class="block">Wait until AM finishes the meta loading, i.e, the region states rebuilding.</div>
 </td>
 </tr>
-<tr id="i99" class="rowColor">
+<tr id="i97" class="rowColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#waitOnAssignQueue--">waitOnAssignQueue</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i100" class="altColor">
+<tr id="i98" class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#waitServerReportEvent-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.procedure2.Procedure-">waitServerReportEvent</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                      <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc)</code>&nbsp;</td>
 </tr>
-<tr id="i101" class="rowColor">
+<tr id="i99" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#wakeMetaLoadedEvent--">wakeMetaLoadedEvent</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i102" class="altColor">
+<tr id="i100" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#wakeServerReportEvent-org.apache.hadoop.hbase.master.assignment.ServerStateNode-">wakeServerReportEvent</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">ServerStateNode</a>&nbsp;serverNode)</code>&nbsp;</td>
 </tr>
@@ -889,7 +880,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.104">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.103">LOG</a></pre>
 </li>
 </ul>
 <a name="BOOTSTRAP_THREAD_POOL_SIZE_CONF_KEY">
@@ -898,7 +889,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList">
 <h4>BOOTSTRAP_THREAD_POOL_SIZE_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.117">BOOTSTRAP_THREAD_POOL_SIZE_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.116">BOOTSTRAP_THREAD_POOL_SIZE_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.assignment.AssignmentManager.BOOTSTRAP_THREAD_POOL_SIZE_CONF_KEY">Constant Field Values</a></dd>
@@ -911,7 +902,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList">
 <h4>ASSIGN_DISPATCH_WAIT_MSEC_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.120">ASSIGN_DISPATCH_WAIT_MSEC_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.119">ASSIGN_DISPATCH_WAIT_MSEC_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.assignment.AssignmentManager.ASSIGN_DISPATCH_WAIT_MSEC_CONF_KEY">Constant Field Values</a></dd>
@@ -924,7 +915,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_ASSIGN_DISPATCH_WAIT_MSEC</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.122">DEFAULT_ASSIGN_DISPATCH_WAIT_MSEC</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.121">DEFAULT_ASSIGN_DISPATCH_WAIT_MSEC</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.assignment.AssignmentManager.DEFAULT_ASSIGN_DISPATCH_WAIT_MSEC">Constant Field Values</a></dd>
@@ -937,7 +928,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList">
 <h4>ASSIGN_DISPATCH_WAITQ_MAX_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.124">ASSIGN_DISPATCH_WAITQ_MAX_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.123">ASSIGN_DISPATCH_WAITQ_MAX_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.assignment.AssignmentManager.ASSIGN_DISPATCH_WAITQ_MAX_CONF_KEY">Constant Field Values</a></dd>
@@ -950,7 +941,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_ASSIGN_DISPATCH_WAITQ_MAX</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.126">DEFAULT_ASSIGN_DISPATCH_WAITQ_MAX</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.125">DEFAULT_ASSIGN_DISPATCH_WAITQ_MAX</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.assignment.AssignmentManager.DEFAULT_ASSIGN_DISPATCH_WAITQ_MAX">Constant Field Values</a></dd>
@@ -963,7 +954,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList">
 <h4>RIT_CHORE_INTERVAL_MSEC_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.128">RIT_CHORE_INTERVAL_MSEC_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.127">RIT_CHORE_INTERVAL_MSEC_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.assignment.AssignmentManager.RIT_CHORE_INTERVAL_MSEC_CONF_KEY">Constant Field Values</a></dd>
@@ -976,7 +967,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_RIT_CHORE_INTERVAL_MSEC</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.130">DEFAULT_RIT_CHORE_INTERVAL_MSEC</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.129">DEFAULT_RIT_CHORE_INTERVAL_MSEC</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.assignment.AssignmentManager.DEFAULT_RIT_CHORE_INTERVAL_MSEC">Constant Field Values</a></dd>
@@ -989,7 +980,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList">
 <h4>ASSIGN_MAX_ATTEMPTS</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.132">ASSIGN_MAX_ATTEMPTS</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.131">ASSIGN_MAX_ATTEMPTS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.assignment.AssignmentManager.ASSIGN_MAX_ATTEMPTS">Constant Field Values</a></dd>
@@ -1002,7 +993,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_ASSIGN_MAX_ATTEMPTS</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.134">DEFAULT_ASSIGN_MAX_ATTEMPTS</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.133">DEFAULT_ASSIGN_MAX_ATTEMPTS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.assignment.AssignmentManager.DEFAULT_ASSIGN_MAX_ATTEMPTS">Constant Field Values</a></dd>
@@ -1015,7 +1006,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList">
 <h4>METRICS_RIT_STUCK_WARNING_THRESHOLD</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.137">METRICS_RIT_STUCK_WARNING_THRESHOLD</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.136">METRICS_RIT_STUCK_WARNING_THRESHOLD</a></pre>
 <div class="block">Region in Transition metrics threshold time</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1029,7 +1020,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_RIT_STUCK_WARNING_THRESHOLD</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.139">DEFAULT_RIT_STUCK_WARNING_THRESHOLD</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.138">DEFAULT_RIT_STUCK_WARNING_THRESHOLD</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.assignment.AssignmentManager.DEFAULT_RIT_STUCK_WARNING_THRESHOLD">Constant Field Values</a></dd>
@@ -1042,7 +1033,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList">
 <h4>metaAssignEvent</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a>&lt;?&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.141">metaAssignEvent</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a>&lt;?&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.140">metaAssignEvent</a></pre>
 </li>
 </ul>
 <a name="metaLoadEvent">
@@ -1051,7 +1042,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList">
 <h4>metaLoadEvent</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a>&lt;?&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.142">metaLoadEvent</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a>&lt;?&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.141">metaLoadEvent</a></pre>
 </li>
 </ul>
 <a name="metrics">
@@ -1060,7 +1051,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList">
 <h4>metrics</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/MetricsAssignmentManager.html" title="class in org.apache.hadoop.hbase.master">MetricsAssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.144">metrics</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/MetricsAssignmentManager.html" title="class in org.apache.hadoop.hbase.master">MetricsAssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.143">metrics</a></pre>
 </li>
 </ul>
 <a name="ritChore">
@@ -1069,7 +1060,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList">
 <h4>ritChore</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager.RegionInTransitionChore</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.145">ritChore</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager.RegionInTransitionChore</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.144">ritChore</a></pre>
 </li>
 </ul>
 <a name="master">
@@ -1078,7 +1069,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList">
 <h4>master</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.146">master</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.145">master</a></pre>
 </li>
 </ul>
 <a name="running">
@@ -1087,7 +1078,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList">
 <h4>running</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.148">running</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.147">running</a></pre>
 </li>
 </ul>
 <a name="regionStates">
@@ -1096,7 +1087,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList">
 <h4>regionStates</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.149">regionStates</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.148">regionStates</a></pre>
 </li>
 </ul>
 <a name="regionStateStore">
@@ -1105,7 +1096,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList">
 <h4>regionStateStore</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateStore.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateStore</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.150">regionStateStore</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateStore.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateStore</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.149">regionStateStore</a></pre>
 </li>
 </ul>
 <a name="shouldAssignRegionsWithFavoredNodes">
@@ -1114,7 +1105,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldAssignRegionsWithFavoredNodes</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.152">shouldAssignRegionsWithFavoredNodes</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.151">shouldAssignRegionsWithFavoredNodes</a></pre>
 </li>
 </ul>
 <a name="assignDispatchWaitQueueMaxSize">
@@ -1123,7 +1114,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList">
 <h4>assignDispatchWaitQueueMaxSize</h4>
-<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.153">assignDispatchWaitQueueMaxSize</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.152">assignDispatchWaitQueueMaxSize</a></pre>
 </li>
 </ul>
 <a name="assignDispatchWaitMillis">
@@ -1132,7 +1123,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList">
 <h4>assignDispatchWaitMillis</h4>
-<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.154">assignDispatchWaitMillis</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.153">assignDispatchWaitMillis</a></pre>
 </li>
 </ul>
 <a name="assignMaxAttempts">
@@ -1141,7 +1132,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList">
 <h4>assignMaxAttempts</h4>
-<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.155">assignMaxAttempts</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.154">assignMaxAttempts</a></pre>
 </li>
 </ul>
 <a name="checkIfShouldMoveSystemRegionLock">
@@ -1150,7 +1141,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <ul class="blockList">
 <li class="blockList

<TRUNCATED>

[16/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
index 8ef8fea..57d590b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
@@ -47,130 +47,130 @@
 <span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.ServerName;<a name="line.39"></a>
 <span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.TableName;<a name="line.40"></a>
 <span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.YouAreDeadException;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.DoNotRetryRegionException;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.Result;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.exceptions.UnexpectedStateException;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.favored.FavoredNodesManager;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.favored.FavoredNodesPromoter;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.MetricsAssignmentManager;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.master.RegionState.State;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.master.ServerListener;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.master.TableStateManager;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.master.balancer.FavoredStochasticBalancer;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.procedure2.ProcedureInMemoryChore;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.procedure2.util.StringUtils;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.regionserver.SequenceId;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.util.VersionInfo;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.zookeeper.KeeperException;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.slf4j.Logger;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.slf4j.LoggerFactory;<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse;<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>/**<a name="line.91"></a>
-<span class="sourceLineNo">092</span> * The AssignmentManager is the coordinator for region assign/unassign operations.<a name="line.92"></a>
-<span class="sourceLineNo">093</span> * &lt;ul&gt;<a name="line.93"></a>
-<span class="sourceLineNo">094</span> * &lt;li&gt;In-memory states of regions and servers are stored in {@link RegionStates}.&lt;/li&gt;<a name="line.94"></a>
-<span class="sourceLineNo">095</span> * &lt;li&gt;hbase:meta state updates are handled by {@link RegionStateStore}.&lt;/li&gt;<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * &lt;/ul&gt;<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * Regions are created by CreateTable, Split, Merge.<a name="line.97"></a>
-<span class="sourceLineNo">098</span> * Regions are deleted by DeleteTable, Split, Merge.<a name="line.98"></a>
-<span class="sourceLineNo">099</span> * Assigns are triggered by CreateTable, EnableTable, Split, Merge, ServerCrash.<a name="line.99"></a>
-<span class="sourceLineNo">100</span> * Unassigns are triggered by DisableTable, Split, Merge<a name="line.100"></a>
-<span class="sourceLineNo">101</span> */<a name="line.101"></a>
-<span class="sourceLineNo">102</span>@InterfaceAudience.Private<a name="line.102"></a>
-<span class="sourceLineNo">103</span>public class AssignmentManager implements ServerListener {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  private static final Logger LOG = LoggerFactory.getLogger(AssignmentManager.class);<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>  // TODO: AMv2<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  //  - handle region migration from hbase1 to hbase2.<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  //  - handle sys table assignment first (e.g. acl, namespace)<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  //  - handle table priorities<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  //  - If ServerBusyException trying to update hbase:meta, we abort the Master<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  //   See updateRegionLocation in RegionStateStore.<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  //<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  // See also<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  // https://docs.google.com/document/d/1eVKa7FHdeoJ1-9o8yZcOTAQbv0u0bblBlCCzVSIn69g/edit#heading=h.ystjyrkbtoq5<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  // for other TODOs.<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  public static final String BOOTSTRAP_THREAD_POOL_SIZE_CONF_KEY =<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      "hbase.assignment.bootstrap.thread.pool.size";<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>  public static final String ASSIGN_DISPATCH_WAIT_MSEC_CONF_KEY =<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      "hbase.assignment.dispatch.wait.msec";<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  private static final int DEFAULT_ASSIGN_DISPATCH_WAIT_MSEC = 150;<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>  public static final String ASSIGN_DISPATCH_WAITQ_MAX_CONF_KEY =<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      "hbase.assignment.dispatch.wait.queue.max.size";<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  private static final int DEFAULT_ASSIGN_DISPATCH_WAITQ_MAX = 100;<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>  public static final String RIT_CHORE_INTERVAL_MSEC_CONF_KEY =<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      "hbase.assignment.rit.chore.interval.msec";<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  private static final int DEFAULT_RIT_CHORE_INTERVAL_MSEC = 60 * 1000;<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>  public static final String ASSIGN_MAX_ATTEMPTS =<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      "hbase.assignment.maximum.attempts";<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  private static final int DEFAULT_ASSIGN_MAX_ATTEMPTS = Integer.MAX_VALUE;<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span>  /** Region in Transition metrics threshold time */<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  public static final String METRICS_RIT_STUCK_WARNING_THRESHOLD =<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      "hbase.metrics.rit.stuck.warning.threshold";<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  private static final int DEFAULT_RIT_STUCK_WARNING_THRESHOLD = 60 * 1000;<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  private final ProcedureEvent&lt;?&gt; metaAssignEvent = new ProcedureEvent&lt;&gt;("meta assign");<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private final ProcedureEvent&lt;?&gt; metaLoadEvent = new ProcedureEvent&lt;&gt;("meta load");<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private final MetricsAssignmentManager metrics;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  private final RegionInTransitionChore ritChore;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  private final MasterServices master;<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private final AtomicBoolean running = new AtomicBoolean(false);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  private final RegionStates regionStates = new RegionStates();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  private final RegionStateStore regionStateStore;<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>  private final boolean shouldAssignRegionsWithFavoredNodes;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  private final int assignDispatchWaitQueueMaxSize;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  private final int assignDispatchWaitMillis;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  private final int assignMaxAttempts;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>  private final Object checkIfShouldMoveSystemRegionLock = new Object();<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span>  private Thread assignThread;<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>  public AssignmentManager(final MasterServices master) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    this(master, new RegionStateStore(master));<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>  public AssignmentManager(final MasterServices master, final RegionStateStore stateStore) {<a name="line.165"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.DoNotRetryRegionException;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.Result;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.exceptions.UnexpectedStateException;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.favored.FavoredNodesManager;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.favored.FavoredNodesPromoter;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.MetricsAssignmentManager;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.master.RegionState.State;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.master.ServerListener;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.master.TableStateManager;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.master.balancer.FavoredStochasticBalancer;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.procedure2.ProcedureInMemoryChore;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.procedure2.util.StringUtils;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.regionserver.SequenceId;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.VersionInfo;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.zookeeper.KeeperException;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.slf4j.Logger;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.slf4j.LoggerFactory;<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse;<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>/**<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * The AssignmentManager is the coordinator for region assign/unassign operations.<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * &lt;ul&gt;<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * &lt;li&gt;In-memory states of regions and servers are stored in {@link RegionStates}.&lt;/li&gt;<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * &lt;li&gt;hbase:meta state updates are handled by {@link RegionStateStore}.&lt;/li&gt;<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * &lt;/ul&gt;<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * Regions are created by CreateTable, Split, Merge.<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * Regions are deleted by DeleteTable, Split, Merge.<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * Assigns are triggered by CreateTable, EnableTable, Split, Merge, ServerCrash.<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * Unassigns are triggered by DisableTable, Split, Merge<a name="line.99"></a>
+<span class="sourceLineNo">100</span> */<a name="line.100"></a>
+<span class="sourceLineNo">101</span>@InterfaceAudience.Private<a name="line.101"></a>
+<span class="sourceLineNo">102</span>public class AssignmentManager implements ServerListener {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  private static final Logger LOG = LoggerFactory.getLogger(AssignmentManager.class);<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  // TODO: AMv2<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  //  - handle region migration from hbase1 to hbase2.<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  //  - handle sys table assignment first (e.g. acl, namespace)<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  //  - handle table priorities<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  //  - If ServerBusyException trying to update hbase:meta, we abort the Master<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  //   See updateRegionLocation in RegionStateStore.<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  //<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  // See also<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  // https://docs.google.com/document/d/1eVKa7FHdeoJ1-9o8yZcOTAQbv0u0bblBlCCzVSIn69g/edit#heading=h.ystjyrkbtoq5<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  // for other TODOs.<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  public static final String BOOTSTRAP_THREAD_POOL_SIZE_CONF_KEY =<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      "hbase.assignment.bootstrap.thread.pool.size";<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>  public static final String ASSIGN_DISPATCH_WAIT_MSEC_CONF_KEY =<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      "hbase.assignment.dispatch.wait.msec";<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  private static final int DEFAULT_ASSIGN_DISPATCH_WAIT_MSEC = 150;<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  public static final String ASSIGN_DISPATCH_WAITQ_MAX_CONF_KEY =<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      "hbase.assignment.dispatch.wait.queue.max.size";<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  private static final int DEFAULT_ASSIGN_DISPATCH_WAITQ_MAX = 100;<a name="line.125"></a>
+<span class="sourceLineNo">126</span><a name="line.126"></a>
+<span class="sourceLineNo">127</span>  public static final String RIT_CHORE_INTERVAL_MSEC_CONF_KEY =<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      "hbase.assignment.rit.chore.interval.msec";<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  private static final int DEFAULT_RIT_CHORE_INTERVAL_MSEC = 60 * 1000;<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public static final String ASSIGN_MAX_ATTEMPTS =<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      "hbase.assignment.maximum.attempts";<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  private static final int DEFAULT_ASSIGN_MAX_ATTEMPTS = Integer.MAX_VALUE;<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span>  /** Region in Transition metrics threshold time */<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  public static final String METRICS_RIT_STUCK_WARNING_THRESHOLD =<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      "hbase.metrics.rit.stuck.warning.threshold";<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  private static final int DEFAULT_RIT_STUCK_WARNING_THRESHOLD = 60 * 1000;<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>  private final ProcedureEvent&lt;?&gt; metaAssignEvent = new ProcedureEvent&lt;&gt;("meta assign");<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  private final ProcedureEvent&lt;?&gt; metaLoadEvent = new ProcedureEvent&lt;&gt;("meta load");<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>  private final MetricsAssignmentManager metrics;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  private final RegionInTransitionChore ritChore;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  private final MasterServices master;<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>  private final AtomicBoolean running = new AtomicBoolean(false);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  private final RegionStates regionStates = new RegionStates();<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private final RegionStateStore regionStateStore;<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>  private final boolean shouldAssignRegionsWithFavoredNodes;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  private final int assignDispatchWaitQueueMaxSize;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  private final int assignDispatchWaitMillis;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  private final int assignMaxAttempts;<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  private final Object checkIfShouldMoveSystemRegionLock = new Object();<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>  private Thread assignThread;<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>  public AssignmentManager(final MasterServices master) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    this(master, new RegionStateStore(master));<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  }<a name="line.162"></a>
+<span class="sourceLineNo">163</span><a name="line.163"></a>
+<span class="sourceLineNo">164</span>  @VisibleForTesting<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  AssignmentManager(final MasterServices master, final RegionStateStore stateStore) {<a name="line.165"></a>
 <span class="sourceLineNo">166</span>    this.master = master;<a name="line.166"></a>
 <span class="sourceLineNo">167</span>    this.regionStateStore = stateStore;<a name="line.167"></a>
 <span class="sourceLineNo">168</span>    this.metrics = new MetricsAssignmentManager();<a name="line.168"></a>
@@ -987,941 +987,895 @@
 <span class="sourceLineNo">979</span>  //  RS Status update (report online regions) helpers<a name="line.979"></a>
 <span class="sourceLineNo">980</span>  // ============================================================================================<a name="line.980"></a>
 <span class="sourceLineNo">981</span>  /**<a name="line.981"></a>
-<span class="sourceLineNo">982</span>   * the master will call this method when the RS send the regionServerReport().<a name="line.982"></a>
-<span class="sourceLineNo">983</span>   * the report will contains the "online regions".<a name="line.983"></a>
-<span class="sourceLineNo">984</span>   * this method will check the the online regions against the in-memory state of the AM,<a name="line.984"></a>
-<span class="sourceLineNo">985</span>   * if there is a mismatch we will try to fence out the RS with the assumption<a name="line.985"></a>
-<span class="sourceLineNo">986</span>   * that something went wrong on the RS side.<a name="line.986"></a>
-<span class="sourceLineNo">987</span>   */<a name="line.987"></a>
-<span class="sourceLineNo">988</span>  public void reportOnlineRegions(final ServerName serverName, final Set&lt;byte[]&gt; regionNames)<a name="line.988"></a>
-<span class="sourceLineNo">989</span>      throws YouAreDeadException {<a name="line.989"></a>
-<span class="sourceLineNo">990</span>    if (!isRunning()) return;<a name="line.990"></a>
-<span class="sourceLineNo">991</span>    if (LOG.isTraceEnabled()) {<a name="line.991"></a>
-<span class="sourceLineNo">992</span>      LOG.trace("ReportOnlineRegions " + serverName + " regionCount=" + regionNames.size() +<a name="line.992"></a>
-<span class="sourceLineNo">993</span>        ", metaLoaded=" + isMetaLoaded() + " " +<a name="line.993"></a>
-<span class="sourceLineNo">994</span>          regionNames.stream().map(element -&gt; Bytes.toStringBinary(element)).<a name="line.994"></a>
-<span class="sourceLineNo">995</span>            collect(Collectors.toList()));<a name="line.995"></a>
-<span class="sourceLineNo">996</span>    }<a name="line.996"></a>
-<span class="sourceLineNo">997</span><a name="line.997"></a>
-<span class="sourceLineNo">998</span>    final ServerStateNode serverNode = regionStates.getOrCreateServer(serverName);<a name="line.998"></a>
-<span class="sourceLineNo">999</span><a name="line.999"></a>
-<span class="sourceLineNo">1000</span>    synchronized (serverNode) {<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>      if (!serverNode.isInState(ServerState.ONLINE)) {<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>        LOG.warn("Got a report from a server result in state " + serverNode.getState());<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>        return;<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>      }<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>    }<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span><a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>    if (regionNames.isEmpty()) {<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>      // nothing to do if we don't have regions<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>      LOG.trace("no online region found on " + serverName);<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>    } else if (!isMetaLoaded()) {<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>      // if we are still on startup, discard the report unless is from someone holding meta<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      checkOnlineRegionsReportForMeta(serverNode, regionNames);<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>    } else {<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      // The Heartbeat updates us of what regions are only. check and verify the state.<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>      checkOnlineRegionsReport(serverNode, regionNames);<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>    }<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span><a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>    // wake report event<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>    wakeServerReportEvent(serverNode);<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>  void checkOnlineRegionsReportForMeta(ServerStateNode serverNode, Set&lt;byte[]&gt; regionNames) {<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>    try {<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>      for (byte[] regionName : regionNames) {<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>        final RegionInfo hri = getMetaRegionFromName(regionName);<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>        if (hri == null) {<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>          if (LOG.isTraceEnabled()) {<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>            LOG.trace("Skip online report for region=" + Bytes.toStringBinary(regionName) +<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>              " while meta is loading");<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>          }<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>          continue;<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>        }<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span><a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>        RegionStateNode regionNode = regionStates.getOrCreateRegionStateNode(hri);<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>        LOG.info("META REPORTED: " + regionNode);<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>        regionNode.lock();<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>        try {<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>          if (!reportTransition(regionNode, serverNode, TransitionCode.OPENED, 0)) {<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>            LOG.warn("META REPORTED but no procedure found (complete?); set location=" +<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>              serverNode.getServerName());<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>            regionNode.setRegionLocation(serverNode.getServerName());<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>          } else if (LOG.isTraceEnabled()) {<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>            LOG.trace("META REPORTED: " + regionNode);<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>          }<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>        } finally {<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>          regionNode.unlock();<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>        }<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>      }<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    } catch (IOException e) {<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>      ServerName serverName = serverNode.getServerName();<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>      LOG.warn("KILLING " + serverName + ": " + e.getMessage());<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>      killRegionServer(serverNode);<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    }<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>  }<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span><a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>  void checkOnlineRegionsReport(final ServerStateNode serverNode, final Set&lt;byte[]&gt; regionNames) {<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    final ServerName serverName = serverNode.getServerName();<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    try {<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      for (byte[] regionName: regionNames) {<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>        if (!isRunning()) {<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>          return;<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>        }<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>        final RegionStateNode regionNode = regionStates.getRegionStateNodeFromName(regionName);<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>        if (regionNode == null) {<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>          throw new UnexpectedStateException("Not online: " + Bytes.toStringBinary(regionName));<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>        }<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>        regionNode.lock();<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>        try {<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>          if (regionNode.isInState(State.OPENING, State.OPEN)) {<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>            if (!regionNode.getRegionLocation().equals(serverName)) {<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>              throw new UnexpectedStateException(regionNode.toString() +<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>                " reported OPEN on server=" + serverName +<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>                " but state has otherwise.");<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>            } else if (regionNode.isInState(State.OPENING)) {<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>              try {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>                if (!reportTransition(regionNode, serverNode, TransitionCode.OPENED, 0)) {<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>                  LOG.warn(regionNode.toString() + " reported OPEN on server=" + serverName +<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>                    " but state has otherwise AND NO procedure is running");<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>                }<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>              } catch (UnexpectedStateException e) {<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>                LOG.warn(regionNode.toString() + " reported unexpteced OPEN: " + e.getMessage(), e);<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>              }<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>            }<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>          } else if (!regionNode.isInState(State.CLOSING, State.SPLITTING)) {<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>            long diff = regionNode.getLastUpdate() - EnvironmentEdgeManager.currentTime();<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>            if (diff &gt; 1000/*One Second... make configurable if an issue*/) {<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>              // So, we can get report that a region is CLOSED or SPLIT because a heartbeat<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>              // came in at about same time as a region transition. Make sure there is some<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>              // elapsed time between killing remote server.<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>              throw new UnexpectedStateException(regionNode.toString() +<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>                " reported an unexpected OPEN; time since last update=" + diff);<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>            }<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>          }<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>        } finally {<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>          regionNode.unlock();<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>    } catch (IOException e) {<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>      //See HBASE-21421, we can count on reportRegionStateTransition calls<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      //We only log a warming here. It could be a network lag.<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>      LOG.warn("Failed to checkOnlineRegionsReport, maybe due to network lag, "<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>          + "if this message continues, be careful of double assign", e);<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    }<a name="line.1103"></a>
+<span class="sourceLineNo">982</span>   * The master will call this method when the RS send the regionServerReport(). The report will<a name="line.982"></a>
+<span class="sourceLineNo">983</span>   * contains the "online regions". This method will check the the online regions against the<a name="line.983"></a>
+<span class="sourceLineNo">984</span>   * in-memory state of the AM, and we will log a warn message if there is a mismatch. This is<a name="line.984"></a>
+<span class="sourceLineNo">985</span>   * because that there is no fencing between the reportRegionStateTransition method and<a name="line.985"></a>
+<span class="sourceLineNo">986</span>   * regionServerReport method, so there could be race and introduce inconsistency here, but<a name="line.986"></a>
+<span class="sourceLineNo">987</span>   * actually there is no problem.<a name="line.987"></a>
+<span class="sourceLineNo">988</span>   * &lt;p/&gt;<a name="line.988"></a>
+<span class="sourceLineNo">989</span>   * Please see HBASE-21421 and HBASE-21463 for more details.<a name="line.989"></a>
+<span class="sourceLineNo">990</span>   */<a name="line.990"></a>
+<span class="sourceLineNo">991</span>  public void reportOnlineRegions(ServerName serverName, Set&lt;byte[]&gt; regionNames) {<a name="line.991"></a>
+<span class="sourceLineNo">992</span>    if (!isRunning()) {<a name="line.992"></a>
+<span class="sourceLineNo">993</span>      return;<a name="line.993"></a>
+<span class="sourceLineNo">994</span>    }<a name="line.994"></a>
+<span class="sourceLineNo">995</span>    if (LOG.isTraceEnabled()) {<a name="line.995"></a>
+<span class="sourceLineNo">996</span>      LOG.trace("ReportOnlineRegions {} regionCount={}, metaLoaded={} {}", serverName,<a name="line.996"></a>
+<span class="sourceLineNo">997</span>        regionNames.size(), isMetaLoaded(),<a name="line.997"></a>
+<span class="sourceLineNo">998</span>        regionNames.stream().map(Bytes::toStringBinary).collect(Collectors.toList()));<a name="line.998"></a>
+<span class="sourceLineNo">999</span>    }<a name="line.999"></a>
+<span class="sourceLineNo">1000</span><a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>    ServerStateNode serverNode = regionStates.getOrCreateServer(serverName);<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span><a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>    synchronized (serverNode) {<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>      if (!serverNode.isInState(ServerState.ONLINE)) {<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>        LOG.warn("Got a report from a server result in state " + serverNode.getState());<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>        return;<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>      }<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>    }<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>    if (regionNames.isEmpty()) {<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>      // nothing to do if we don't have regions<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>      LOG.trace("no online region found on {}", serverName);<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>      return;<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>    }<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>    if (!isMetaLoaded()) {<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>      // we are still on startup, skip checking<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>      return;<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>    }<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>    // The Heartbeat tells us of what regions are on the region serve, check the state.<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>    checkOnlineRegionsReport(serverNode, regionNames);<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span><a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>    // wake report event<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>    wakeServerReportEvent(serverNode);<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>  }<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span><a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>  // just check and output possible inconsistency, without actually doing anything<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>  private void checkOnlineRegionsReport(ServerStateNode serverNode, Set&lt;byte[]&gt; regionNames) {<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>    ServerName serverName = serverNode.getServerName();<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>    for (byte[] regionName : regionNames) {<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>      if (!isRunning()) {<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>        return;<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>      }<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      RegionStateNode regionNode = regionStates.getRegionStateNodeFromName(regionName);<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>      if (regionNode == null) {<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>        LOG.warn("No region state node for {}, it should already be on {}",<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>          Bytes.toStringBinary(regionName), serverName);<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>        continue;<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>      }<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>      regionNode.lock();<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>      try {<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>        long diff = EnvironmentEdgeManager.currentTime() - regionNode.getLastUpdate();<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>        if (regionNode.isInState(State.OPENING, State.OPEN)) {<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>          // This is possible as a region server has just closed a region but the region server<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>          // report is generated before the closing, but arrive after the closing. Make sure there<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>          // is some elapsed time so less false alarms.<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>          if (!regionNode.getRegionLocation().equals(serverName) &amp;&amp; diff &gt; 1000) {<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>            LOG.warn("{} reported OPEN on server={} but state has otherwise", regionNode,<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>              serverName);<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>          }<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>        } else if (!regionNode.isInState(State.CLOSING, State.SPLITTING)) {<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>          // So, we can get report that a region is CLOSED or SPLIT because a heartbeat<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>          // came in at about same time as a region transition. Make sure there is some<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>          // elapsed time so less false alarms.<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>          if (diff &gt; 1000) {<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>            LOG.warn("{} reported an unexpected OPEN on {}; time since last update={}ms",<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>              regionNode, serverName, diff);<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>          }<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>        }<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>      } finally {<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>        regionNode.unlock();<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>      }<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    }<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>  }<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span><a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>  protected boolean waitServerReportEvent(ServerName serverName, Procedure&lt;?&gt; proc) {<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>    final ServerStateNode serverNode = regionStates.getOrCreateServer(serverName);<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    if (serverNode == null) {<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>      LOG.warn("serverName=null; {}", proc);<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>    }<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>    return serverNode.getReportEvent().suspendIfNotReady(proc);<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>  }<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span><a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>  protected void wakeServerReportEvent(final ServerStateNode serverNode) {<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>    serverNode.getReportEvent().wake(getProcedureScheduler());<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>  }<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span><a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>  // ============================================================================================<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>  //  RIT chore<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>  // ============================================================================================<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>  private static class RegionInTransitionChore extends ProcedureInMemoryChore&lt;MasterProcedureEnv&gt; {<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>    public RegionInTransitionChore(final int timeoutMsec) {<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      super(timeoutMsec);<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>    }<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span><a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>    @Override<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    protected void periodicExecute(final MasterProcedureEnv env) {<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>      final AssignmentManager am = env.getAssignmentManager();<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span><a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      final RegionInTransitionStat ritStat = am.computeRegionInTransitionStat();<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>      if (ritStat.hasRegionsOverThreshold()) {<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>        for (RegionState hri: ritStat.getRegionOverThreshold()) {<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>          am.handleRegionOverStuckWarningThreshold(hri.getRegion());<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>        }<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>      }<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span><a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>      // update metrics<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>      am.updateRegionsInTransitionMetrics(ritStat);<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>    }<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>  public RegionInTransitionStat computeRegionInTransitionStat() {<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>    final RegionInTransitionStat rit = new RegionInTransitionStat(getConfiguration());<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>    rit.update(this);<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>    return rit;<a name="line.1103"></a>
 <span class="sourceLineNo">1104</span>  }<a name="line.1104"></a>
 <span class="sourceLineNo">1105</span><a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>  protected boolean waitServerReportEvent(ServerName serverName, Procedure&lt;?&gt; proc) {<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    final ServerStateNode serverNode = regionStates.getOrCreateServer(serverName);<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    if (serverNode == null) {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      LOG.warn("serverName=null; {}", proc);<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    }<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>    return serverNode.getReportEvent().suspendIfNotReady(proc);<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>  }<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span><a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>  protected void wakeServerReportEvent(final ServerStateNode serverNode) {<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>    serverNode.getReportEvent().wake(getProcedureScheduler());<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>  }<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span><a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>  // ============================================================================================<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>  //  RIT chore<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>  // ============================================================================================<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>  private static class RegionInTransitionChore extends ProcedureInMemoryChore&lt;MasterProcedureEnv&gt; {<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>    public RegionInTransitionChore(final int timeoutMsec) {<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>      super(timeoutMsec);<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>    }<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span><a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>    @Override<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    protected void periodicExecute(final MasterProcedureEnv env) {<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>      final AssignmentManager am = env.getAssignmentManager();<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span><a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>      final RegionInTransitionStat ritStat = am.computeRegionInTransitionStat();<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>      if (ritStat.hasRegionsOverThreshold()) {<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>        for (RegionState hri: ritStat.getRegionOverThreshold()) {<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>          am.handleRegionOverStuckWarningThreshold(hri.getRegion());<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>        }<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>      }<a name="line.1135"></a>
+<span class="sourceLineNo">1106</span>  public static class RegionInTransitionStat {<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>    private final int ritThreshold;<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span><a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>    private HashMap&lt;String, RegionState&gt; ritsOverThreshold = null;<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>    private long statTimestamp;<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>    private long oldestRITTime = 0;<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>    private int totalRITsTwiceThreshold = 0;<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>    private int totalRITs = 0;<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span><a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>    @VisibleForTesting<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>    public RegionInTransitionStat(final Configuration conf) {<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>      this.ritThreshold =<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>        conf.getInt(METRICS_RIT_STUCK_WARNING_THRESHOLD, DEFAULT_RIT_STUCK_WARNING_THRESHOLD);<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>    }<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span><a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>    public int getRITThreshold() {<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>      return ritThreshold;<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>    }<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span><a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>    public long getTimestamp() {<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>      return statTimestamp;<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>    }<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span><a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>    public int getTotalRITs() {<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>      return totalRITs;<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>    public long getOldestRITTime() {<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>      return oldestRITTime;<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>    }<a name="line.1135"></a>
 <span class="sourceLineNo">1136</span><a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>      // update metrics<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>      am.updateRegionsInTransitionMetrics(ritStat);<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>    }<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>  }<a name="line.1140"></a>
+<span class="sourceLineNo">1137</span>    public int getTotalRITsOverThreshold() {<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>      return m != null ? m.size() : 0;<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>    }<a name="line.1140"></a>
 <span class="sourceLineNo">1141</span><a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>  public RegionInTransitionStat computeRegionInTransitionStat() {<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    final RegionInTransitionStat rit = new RegionInTransitionStat(getConfiguration());<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>    rit.update(this);<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>    return rit;<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>  public static class RegionInTransitionStat {<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    private final int ritThreshold;<a name="line.1149"></a>
+<span class="sourceLineNo">1142</span>    public boolean hasRegionsTwiceOverThreshold() {<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>      return totalRITsTwiceThreshold &gt; 0;<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>    public boolean hasRegionsOverThreshold() {<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>      return m != null &amp;&amp; !m.isEmpty();<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>    }<a name="line.1149"></a>
 <span class="sourceLineNo">1150</span><a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    private HashMap&lt;String, RegionState&gt; ritsOverThreshold = null;<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>    private long statTimestamp;<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>    private long oldestRITTime = 0;<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>    private int totalRITsTwiceThreshold = 0;<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>    private int totalRITs = 0;<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span><a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    @VisibleForTesting<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>    public RegionInTransitionStat(final Configuration conf) {<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>      this.ritThreshold =<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>        conf.getInt(METRICS_RIT_STUCK_WARNING_THRESHOLD, DEFAULT_RIT_STUCK_WARNING_THRESHOLD);<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    }<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span><a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>    public int getRITThreshold() {<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      return ritThreshold;<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    }<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span><a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>    public long getTimestamp() {<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>      return statTimestamp;<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    }<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span><a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    public int getTotalRITs() {<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>      return totalRITs;<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    }<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span><a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    public long getOldestRITTime() {<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>      return oldestRITTime;<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    }<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span><a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    public int getTotalRITsOverThreshold() {<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>      return m != null ? m.size() : 0;<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>    }<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span><a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>    public boolean hasRegionsTwiceOverThreshold() {<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>      return totalRITsTwiceThreshold &gt; 0;<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    }<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span><a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>    public boolean hasRegionsOverThreshold() {<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>      return m != null &amp;&amp; !m.isEmpty();<a name="line.1190"></a>
+<span class="sourceLineNo">1151</span>    public Collection&lt;RegionState&gt; getRegionOverThreshold() {<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>      return m != null? m.values(): Collections.emptySet();<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>    }<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span><a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>    public boolean isRegionOverThreshold(final RegionInfo regionInfo) {<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>      return m != null &amp;&amp; m.containsKey(regionInfo.getEncodedName());<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>    }<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span><a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>    public boolean isRegionTwiceOverThreshold(final RegionInfo regionInfo) {<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>      if (m == null) return false;<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>      final RegionState state = m.get(regionInfo.getEncodedName());<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>      if (state == null) return false;<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>      return (statTimestamp - state.getStamp()) &gt; (ritThreshold * 2);<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>    }<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span><a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>    protected void update(final AssignmentManager am) {<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>      final RegionStates regionStates = am.getRegionStates();<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>      this.statTimestamp = EnvironmentEdgeManager.currentTime();<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>      update(regionStates.getRegionsStateInTransition(), statTimestamp);<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>      update(regionStates.getRegionFailedOpen(), statTimestamp);<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>    }<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span><a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>    private void update(final Collection&lt;RegionState&gt; regions, final long currentTime) {<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>      for (RegionState state: regions) {<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>        totalRITs++;<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>        final long ritTime = currentTime - state.getStamp();<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>        if (ritTime &gt; ritThreshold) {<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>          if (ritsOverThreshold == null) {<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>            ritsOverThreshold = new HashMap&lt;String, RegionState&gt;();<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>          }<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>          ritsOverThreshold.put(state.getRegion().getEncodedName(), state);<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>          totalRITsTwiceThreshold += (ritTime &gt; (ritThreshold * 2)) ? 1 : 0;<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>        }<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>        if (oldestRITTime &lt; ritTime) {<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>          oldestRITTime = ritTime;<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>        }<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>      }<a name="line.1190"></a>
 <span class="sourceLineNo">1191</span>    }<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span><a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>    public Collection&lt;RegionState&gt; getRegionOverThreshold() {<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      return m != null? m.values(): Collections.emptySet();<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>    }<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span><a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>    public boolean isRegionOverThreshold(final RegionInfo regionInfo) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>      return m != null &amp;&amp; m.containsKey(regionInfo.getEncodedName());<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>    }<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span><a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>    public boolean isRegionTwiceOverThreshold(final RegionInfo regionInfo) {<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>      if (m == null) return false;<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>      final RegionState state = m.get(regionInfo.getEncodedName());<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>      if (state == null) return false;<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>      return (statTimestamp - state.getStamp()) &gt; (ritThreshold * 2);<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>    }<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span><a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>    protected void update(final AssignmentManager am) {<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>      final RegionStates regionStates = am.getRegionStates();<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>      this.statTimestamp = EnvironmentEdgeManager.currentTime();<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>      update(regionStates.getRegionsStateInTransition(), statTimestamp);<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>      update(regionStates.getRegionFailedOpen(), statTimestamp);<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>    }<a name="line.1216"></a>
+<span class="sourceLineNo">1192</span>  }<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span><a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>  private void updateRegionsInTransitionMetrics(final RegionInTransitionStat ritStat) {<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>    metrics.updateRITOldestAge(ritStat.getOldestRITTime());<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>    metrics.updateRITCount(ritStat.getTotalRITs());<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    metrics.updateRITCountOverThreshold(ritStat.getTotalRITsOverThreshold());<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>  }<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span><a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>  private void handleRegionOverStuckWarningThreshold(final RegionInfo regionInfo) {<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>    final RegionStateNode regionNode = regionStates.getRegionStateNode(regionInfo);<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    //if (regionNode.isStuck()) {<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>    LOG.warn("STUCK Region-In-Transition {}", regionNode);<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>  }<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span><a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>  // ============================================================================================<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>  //  TODO: Master load/bootstrap<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>  // ============================================================================================<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>  public void joinCluster() throws IOException {<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>    long startTime = System.nanoTime();<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>    LOG.debug("Joining cluster...");<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span><a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>    // Scan hbase:meta to build list of existing regions, servers, and assignment.<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>    // hbase:meta is online now or will be. Inside loadMeta, we keep trying. Can't make progress<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>    // w/o  meta.<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>    loadMeta();<a name="line.1216"></a>
 <span class="sourceLineNo">1217</span><a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>    private void update(final Collection&lt;RegionState&gt; regions, final long currentTime) {<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>      for (RegionState state: regions) {<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>        totalRITs++;<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>        final long ritTime = currentTime - state.getStamp();<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>        if (ritTime &gt; ritThreshold) {<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>          if (ritsOverThreshold == null) {<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>            ritsOverThreshold = new HashMap&lt;String, RegionState&gt;();<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>          }<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>          ritsOverThreshold.put(state.getRegion().getEncodedName(), state);<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>          totalRITsTwiceThreshold += (ritTime &gt; (ritThreshold * 2)) ? 1 : 0;<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>        }<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>        if (oldestRITTime &lt; ritTime) {<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>          oldestRITTime = ritTime;<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>        }<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>      }<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>    }<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>  }<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span><a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>  private void updateRegionsInTransitionMetrics(final RegionInTransitionStat ritStat) {<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>    metrics.updateRITOldestAge(ritStat.getOldestRITTime());<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>    metrics.updateRITCount(ritStat.getTotalRITs());<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>    metrics.updateRITCountOverThreshold(ritStat.getTotalRITsOverThreshold());<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>  }<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span><a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>  private void handleRegionOverStuckWarningThreshold(final RegionInfo regionInfo) {<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>    final RegionStateNode regionNode = regionStates.getRegionStateNode(regionInfo);<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>    //if (regionNode.isStuck()) {<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>    LOG.warn("STUCK Region-In-Transition {}", regionNode);<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>  }<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span><a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>  // ============================================================================================<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>  //  TODO: Master load/bootstrap<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>  // ============================================================================================<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>  public void joinCluster() throws IOException {<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    long startTime = System.nanoTime();<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>    LOG.debug("Joining cluster...");<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span><a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>    // Scan hbase:meta to build list of existing regions, servers, and assignment.<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>    // hbase:meta is online now or will be. Inside loadMeta, we keep trying. Can't make progress<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>    // w/o  meta.<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>    loadMeta();<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span><a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>    while (master.getServerManager().countOfRegionServers() &lt; 1) {<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>      LOG.info("Waiting for RegionServers to join; current count={}",<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>        master.getServerManager().countOfRegionServers());<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      Threads.sleep(250);<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>    }<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>    LOG.info("Number of RegionServers={}", master.getServerManager().countOfRegionServers());<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span><a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>    // Start the RIT chore<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>    master.getMasterProcedureExecutor().addChore(this.ritChore);<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span><a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>    long costMs = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startTime);<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>    LOG.info("Joined the cluster in {}", StringUtils.humanTimeDiff(costMs));<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>  }<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span><a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>  /**<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>   * Create assign procedure for offline regions.<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>   * Just follow the old processofflineServersWithOnlineRegions method. Since now we do not need to<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>   * deal with dead server any more, we only deal with the regions in OFFLINE state in this method.<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>   * And this is a bit strange, that for new regions, we will add it in CLOSED state instead of<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>   * OFFLINE state, and usually there will be a procedure to track them. The<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>   * processofflineServersWithOnlineRegions is a legacy from long ago, as things are going really<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>   * different now, maybe we do not need this method any more. Need to revisit later.<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>   */<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>  // Public so can be run by the Master as part of the startup. Needs hbase:meta to be online.<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>  // Needs to be done after the table state manager has been started.<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>  public void processOfflineRegions() {<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>    List&lt;RegionInfo&gt; offlineRegions = regionStates.getRegionStates().stream()<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>      .filter(RegionState::isOffline).filter(s -&gt; isTableEnabled(s.getRegion().getTable()))<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>      .map(RegionState::getRegion).collect(Collectors.toList());<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>    if (!offlineRegions.isEmpty()) {<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>      master.getMasterProcedureExecutor().submitProcedures(<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>        master.getAssignmentManager().createRoundRobinAssignProcedures(offlineRegions));<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>    }<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>  }<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span><a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>  private void loadMeta() throws IOException {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>    // TODO: use a thread pool<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>    regionStateStore.visitMeta(new RegionStateStore.RegionStateVisitor() {<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>      @Override<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>      public void visitRegionState(Result result, final RegionInfo regionInfo, final State state,<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>          final ServerName regionLocation, final ServerName lastHost, final long openSeqNum) {<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>        if (state == null &amp;&amp; regionLocation == null &amp;&amp; lastHost == null &amp;&amp;<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>            openSeqNum == SequenceId.NO_SEQUENCE_ID) {<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>          // This is a row with nothing in it.<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>          LOG.warn("Skipping empty row={}", result);<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>          return;<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>        }<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>        State localState = state;<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>        if (localState == null) {<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>          // No region state column data in hbase:meta table! Are I doing a rolling upgrade from<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>          // hbase1 to hbase2? Am I restoring a SNAPSHOT or otherwise adding a region to hbase:meta?<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>          // In any of these cases, state is empty. For now, presume OFFLINE but there are probably<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>          // cases where we need to probe more to be sure this correct; TODO informed by experience.<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>          LOG.info(regionInfo.getEncodedName() + " regionState=null; presuming " + State.OFFLINE);<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span><a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>          localState = State.OFFLINE;<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>        }<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>        RegionStateNode regionNode = regionStates.getOrCreateRegionStateNode(regionInfo);<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>        // Do not need to lock on regionNode, as we can make sure that before we finish loading<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>        // meta, all the related procedures can not be executed. The only exception is formeta<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>        // region related operations, but here we do not load the informations for meta region.<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>        regionNode.setState(localState);<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>        regionNode.setLastHost(lastHost);<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>        regionNode.setRegionLocation(regionLocation);<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>        regionNode.setOpenSeqNum(openSeqNum);<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span><a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>        if (localState == State.OPEN) {<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>          assert regionLocation != null : "found null region location for " + regionNode;<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>          regionStates.addRegionToServer(regionNode);<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>        } else if (localState == State.OFFLINE || regionInfo.isOffline()) {<a name="line.1329"></a>
-<span class=

<TRUNCATED>

[12/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
index 9fd7e0b..fb34e18 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
@@ -1923,188 +1923,193 @@
 <span class="sourceLineNo">1915</span>    return completed.size();<a name="line.1915"></a>
 <span class="sourceLineNo">1916</span>  }<a name="line.1916"></a>
 <span class="sourceLineNo">1917</span><a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>  // ==========================================================================<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  //  Worker Thread<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>  // ==========================================================================<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>  private class WorkerThread extends StoppableThread {<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>    private volatile Procedure&lt;TEnvironment&gt; activeProcedure;<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span><a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>    public WorkerThread(ThreadGroup group) {<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>      this(group, "PEWorker-");<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>    }<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span><a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>    protected WorkerThread(ThreadGroup group, String prefix) {<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>      super(group, prefix + workerId.incrementAndGet());<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      setDaemon(true);<a name="line.1931"></a>
+<span class="sourceLineNo">1918</span>  @VisibleForTesting<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>  public IdLock getProcExecutionLock() {<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    return procExecutionLock;<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>  }<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span><a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>  // ==========================================================================<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  //  Worker Thread<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>  // ==========================================================================<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>  private class WorkerThread extends StoppableThread {<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>    private volatile Procedure&lt;TEnvironment&gt; activeProcedure;<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span><a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>    public WorkerThread(ThreadGroup group) {<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>      this(group, "PEWorker-");<a name="line.1931"></a>
 <span class="sourceLineNo">1932</span>    }<a name="line.1932"></a>
 <span class="sourceLineNo">1933</span><a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>    @Override<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>    public void sendStopSignal() {<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>      scheduler.signalAll();<a name="line.1936"></a>
+<span class="sourceLineNo">1934</span>    protected WorkerThread(ThreadGroup group, String prefix) {<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      super(group, prefix + workerId.incrementAndGet());<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>      setDaemon(true);<a name="line.1936"></a>
 <span class="sourceLineNo">1937</span>    }<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>    @Override<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>    public void run() {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      try {<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>        while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>          @SuppressWarnings("unchecked")<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>          Procedure&lt;TEnvironment&gt; proc = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>          if (proc == null) {<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>            continue;<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>          }<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>          this.activeProcedure = proc;<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>          int activeCount = activeExecutorCount.incrementAndGet();<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          int runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          LOG.trace("Execute pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>            runningCount, activeCount);<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>          IdLock.Entry lockEntry = procExecutionLock.getLockEntry(proc.getProcId());<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>          try {<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>            executeProcedure(proc);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>          } catch (AssertionError e) {<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>            LOG.info("ASSERT pid=" + proc.getProcId(), e);<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>            throw e;<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>          } finally {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>            procExecutionLock.releaseLockEntry(lockEntry);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>            activeCount = activeExecutorCount.decrementAndGet();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>            runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>            LOG.trace("Halt pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>              runningCount, activeCount);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>            this.activeProcedure = null;<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>            lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>            executionStartTime.set(Long.MAX_VALUE);<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>          }<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>        }<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>      } catch (Throwable t) {<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>        LOG.warn("Worker terminating UNNATURALLY {}", this.activeProcedure, t);<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>      } finally {<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>        LOG.trace("Worker terminated.");<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>      }<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>      workerThreads.remove(this);<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>    }<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span><a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    @Override<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>    public String toString() {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>      Procedure&lt;?&gt; p = this.activeProcedure;<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      return getName() + "(pid=" + (p == null? Procedure.NO_PROC_ID: p.getProcId() + ")");<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span><a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>    /**<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>     * @return the time since the current procedure is running<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>     */<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    public long getCurrentRunTime() {<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    }<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span><a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>    // core worker never timeout<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      return true;<a name="line.1994"></a>
+<span class="sourceLineNo">1938</span><a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>    @Override<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>    public void sendStopSignal() {<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>      scheduler.signalAll();<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    }<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>    @Override<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>    public void run() {<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>      try {<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>        while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>          @SuppressWarnings("unchecked")<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>          Procedure&lt;TEnvironment&gt; proc = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>          if (proc == null) {<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>            continue;<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>          }<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>          this.activeProcedure = proc;<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>          int activeCount = activeExecutorCount.incrementAndGet();<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>          int runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>          LOG.trace("Execute pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>            runningCount, activeCount);<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>          executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>          IdLock.Entry lockEntry = procExecutionLock.getLockEntry(proc.getProcId());<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>          try {<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>            executeProcedure(proc);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>          } catch (AssertionError e) {<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>            LOG.info("ASSERT pid=" + proc.getProcId(), e);<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>            throw e;<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>          } finally {<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>            procExecutionLock.releaseLockEntry(lockEntry);<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>            activeCount = activeExecutorCount.decrementAndGet();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>            runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>            LOG.trace("Halt pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>              runningCount, activeCount);<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>            this.activeProcedure = null;<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>            lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>            executionStartTime.set(Long.MAX_VALUE);<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>          }<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>        }<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>      } catch (Throwable t) {<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>        LOG.warn("Worker terminating UNNATURALLY {}", this.activeProcedure, t);<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>      } finally {<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>        LOG.trace("Worker terminated.");<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>      }<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>      workerThreads.remove(this);<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>    }<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span><a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    @Override<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>    public String toString() {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>      Procedure&lt;?&gt; p = this.activeProcedure;<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      return getName() + "(pid=" + (p == null? Procedure.NO_PROC_ID: p.getProcId() + ")");<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span><a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>    /**<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>     * @return the time since the current procedure is running<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>     */<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    public long getCurrentRunTime() {<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1994"></a>
 <span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>  }<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span><a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>  // A worker thread which can be added when core workers are stuck. Will timeout after<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>  // keepAliveTime if there is no procedure to run.<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>  private final class KeepAliveWorkerThread extends WorkerThread {<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span><a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    public KeepAliveWorkerThread(ThreadGroup group) {<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>      super(group, "KeepAlivePEWorker-");<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    }<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span><a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>    @Override<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>      return EnvironmentEdgeManager.currentTime() - lastUpdate &lt; keepAliveTime;<a name="line.2008"></a>
+<span class="sourceLineNo">1996</span><a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>    // core worker never timeout<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      return true;<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>  }<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span><a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>  // A worker thread which can be added when core workers are stuck. Will timeout after<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>  // keepAliveTime if there is no procedure to run.<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>  private final class KeepAliveWorkerThread extends WorkerThread {<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span><a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    public KeepAliveWorkerThread(ThreadGroup group) {<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>      super(group, "KeepAlivePEWorker-");<a name="line.2008"></a>
 <span class="sourceLineNo">2009</span>    }<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>  }<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span><a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>  // ----------------------------------------------------------------------------<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>  // full set of procedures pending and completed to write a compacted<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  // version of the log (in case is a log)?<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>  // will have the tracker saying everything is in the last log.<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  // ----------------------------------------------------------------------------<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span><a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>  private final class WorkerMonitor extends InlineChore {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.2023"></a>
+<span class="sourceLineNo">2010</span><a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>    @Override<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>      return EnvironmentEdgeManager.currentTime() - lastUpdate &lt; keepAliveTime;<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>    }<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>  }<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span><a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>  // ----------------------------------------------------------------------------<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>  // full set of procedures pending and completed to write a compacted<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  // version of the log (in case is a log)?<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>  // will have the tracker saying everything is in the last log.<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  // ----------------------------------------------------------------------------<a name="line.2023"></a>
 <span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span><a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span><a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span><a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>    public WorkerMonitor() {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>      refreshConfig();<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>    }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span><a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    @Override<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>    public void run() {<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>      final int stuckCount = checkForStuckWorkers();<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>      checkThreadCount(stuckCount);<a name="line.2044"></a>
+<span class="sourceLineNo">2025</span>  private final class WorkerMonitor extends InlineChore {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span><a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span><a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span><a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>    public WorkerMonitor() {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>      refreshConfig();<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>    }<a name="line.2044"></a>
 <span class="sourceLineNo">2045</span><a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>      // refresh interval (poor man dynamic conf update)<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>      refreshConfig();<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    }<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span><a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>    private int checkForStuckWorkers() {<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>      // check if any of the worker is stuck<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>      int stuckCount = 0;<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>      for (WorkerThread worker : workerThreads) {<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>          continue;<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        }<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span><a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // WARN the worker is stuck<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        stuckCount++;<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Worker stuck {}, run time {}", worker,<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>      }<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>      return stuckCount;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>    }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span><a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    private void checkThreadCount(final int stuckCount) {<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      // nothing to do if there are no runnable tasks<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) {<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>        return;<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>      }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>      // add a new thread if the worker stuck percentage exceed the threshold limit<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>      // and every handler is active.<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>      final float stuckPerc = ((float) stuckCount) / workerThreads.size();<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      // let's add new worker thread more aggressively, as they will timeout finally if there is no<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>      // work to do.<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>      if (stuckPerc &gt;= addWorkerStuckPercentage &amp;&amp; workerThreads.size() &lt; maxPoolSize) {<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>        final KeepAliveWorkerThread worker = new KeepAliveWorkerThread(threadGroup);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>        workerThreads.add(worker);<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>        worker.start();<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>        LOG.debug("Added new worker thread {}", worker);<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>      }<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>    }<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span><a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>    private void refreshConfig() {<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      addWorkerStuckPercentage = conf.getFloat(WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY,<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>          DEFAULT_WORKER_ADD_STUCK_PERCENTAGE);<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>      timeoutInterval = conf.getInt(WORKER_MONITOR_INTERVAL_CONF_KEY,<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>        DEFAULT_WORKER_MONITOR_INTERVAL);<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      stuckThreshold = conf.getInt(WORKER_STUCK_THRESHOLD_CONF_KEY,<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>        DEFAULT_WORKER_STUCK_THRESHOLD);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>    }<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span><a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>    @Override<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>    public int getTimeoutInterval() {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>      return timeoutInterval;<a name="line.2096"></a>
+<span class="sourceLineNo">2046</span>    @Override<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>    public void run() {<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>      final int stuckCount = checkForStuckWorkers();<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>      checkThreadCount(stuckCount);<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span><a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>      // refresh interval (poor man dynamic conf update)<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>      refreshConfig();<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>    }<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span><a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>    private int checkForStuckWorkers() {<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>      // check if any of the worker is stuck<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>      int stuckCount = 0;<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>      for (WorkerThread worker : workerThreads) {<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>          continue;<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        }<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span><a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // WARN the worker is stuck<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        stuckCount++;<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Worker stuck {}, run time {}", worker,<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>      return stuckCount;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span><a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>    private void checkThreadCount(final int stuckCount) {<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      // nothing to do if there are no runnable tasks<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) {<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>        return;<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>      }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>      // add a new thread if the worker stuck percentage exceed the threshold limit<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>      // and every handler is active.<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>      final float stuckPerc = ((float) stuckCount) / workerThreads.size();<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      // let's add new worker thread more aggressively, as they will timeout finally if there is no<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>      // work to do.<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>      if (stuckPerc &gt;= addWorkerStuckPercentage &amp;&amp; workerThreads.size() &lt; maxPoolSize) {<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>        final KeepAliveWorkerThread worker = new KeepAliveWorkerThread(threadGroup);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>        workerThreads.add(worker);<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>        worker.start();<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>        LOG.debug("Added new worker thread {}", worker);<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>      }<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>    }<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span><a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>    private void refreshConfig() {<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>      addWorkerStuckPercentage = conf.getFloat(WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY,<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>          DEFAULT_WORKER_ADD_STUCK_PERCENTAGE);<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>      timeoutInterval = conf.getInt(WORKER_MONITOR_INTERVAL_CONF_KEY,<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>        DEFAULT_WORKER_MONITOR_INTERVAL);<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      stuckThreshold = conf.getInt(WORKER_STUCK_THRESHOLD_CONF_KEY,<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>        DEFAULT_WORKER_STUCK_THRESHOLD);<a name="line.2096"></a>
 <span class="sourceLineNo">2097</span>    }<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>  }<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>}<a name="line.2099"></a>
+<span class="sourceLineNo">2098</span><a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>    @Override<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>    public int getTimeoutInterval() {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>      return timeoutInterval;<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>    }<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>  }<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>}<a name="line.2104"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
index 9fd7e0b..fb34e18 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
@@ -1923,188 +1923,193 @@
 <span class="sourceLineNo">1915</span>    return completed.size();<a name="line.1915"></a>
 <span class="sourceLineNo">1916</span>  }<a name="line.1916"></a>
 <span class="sourceLineNo">1917</span><a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>  // ==========================================================================<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  //  Worker Thread<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>  // ==========================================================================<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>  private class WorkerThread extends StoppableThread {<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>    private volatile Procedure&lt;TEnvironment&gt; activeProcedure;<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span><a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>    public WorkerThread(ThreadGroup group) {<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>      this(group, "PEWorker-");<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>    }<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span><a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>    protected WorkerThread(ThreadGroup group, String prefix) {<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>      super(group, prefix + workerId.incrementAndGet());<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      setDaemon(true);<a name="line.1931"></a>
+<span class="sourceLineNo">1918</span>  @VisibleForTesting<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>  public IdLock getProcExecutionLock() {<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    return procExecutionLock;<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>  }<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span><a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>  // ==========================================================================<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  //  Worker Thread<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>  // ==========================================================================<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>  private class WorkerThread extends StoppableThread {<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>    private volatile Procedure&lt;TEnvironment&gt; activeProcedure;<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span><a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>    public WorkerThread(ThreadGroup group) {<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>      this(group, "PEWorker-");<a name="line.1931"></a>
 <span class="sourceLineNo">1932</span>    }<a name="line.1932"></a>
 <span class="sourceLineNo">1933</span><a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>    @Override<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>    public void sendStopSignal() {<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>      scheduler.signalAll();<a name="line.1936"></a>
+<span class="sourceLineNo">1934</span>    protected WorkerThread(ThreadGroup group, String prefix) {<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      super(group, prefix + workerId.incrementAndGet());<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>      setDaemon(true);<a name="line.1936"></a>
 <span class="sourceLineNo">1937</span>    }<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>    @Override<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>    public void run() {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      try {<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>        while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>          @SuppressWarnings("unchecked")<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>          Procedure&lt;TEnvironment&gt; proc = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>          if (proc == null) {<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>            continue;<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>          }<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>          this.activeProcedure = proc;<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>          int activeCount = activeExecutorCount.incrementAndGet();<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          int runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          LOG.trace("Execute pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>            runningCount, activeCount);<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>          IdLock.Entry lockEntry = procExecutionLock.getLockEntry(proc.getProcId());<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>          try {<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>            executeProcedure(proc);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>          } catch (AssertionError e) {<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>            LOG.info("ASSERT pid=" + proc.getProcId(), e);<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>            throw e;<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>          } finally {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>            procExecutionLock.releaseLockEntry(lockEntry);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>            activeCount = activeExecutorCount.decrementAndGet();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>            runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>            LOG.trace("Halt pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>              runningCount, activeCount);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>            this.activeProcedure = null;<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>            lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>            executionStartTime.set(Long.MAX_VALUE);<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>          }<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>        }<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>      } catch (Throwable t) {<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>        LOG.warn("Worker terminating UNNATURALLY {}", this.activeProcedure, t);<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>      } finally {<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>        LOG.trace("Worker terminated.");<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>      }<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>      workerThreads.remove(this);<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>    }<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span><a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    @Override<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>    public String toString() {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>      Procedure&lt;?&gt; p = this.activeProcedure;<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      return getName() + "(pid=" + (p == null? Procedure.NO_PROC_ID: p.getProcId() + ")");<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span><a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>    /**<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>     * @return the time since the current procedure is running<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>     */<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    public long getCurrentRunTime() {<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    }<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span><a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>    // core worker never timeout<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      return true;<a name="line.1994"></a>
+<span class="sourceLineNo">1938</span><a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>    @Override<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>    public void sendStopSignal() {<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>      scheduler.signalAll();<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    }<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>    @Override<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>    public void run() {<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>      try {<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>        while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>          @SuppressWarnings("unchecked")<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>          Procedure&lt;TEnvironment&gt; proc = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>          if (proc == null) {<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>            continue;<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>          }<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>          this.activeProcedure = proc;<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>          int activeCount = activeExecutorCount.incrementAndGet();<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>          int runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>          LOG.trace("Execute pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>            runningCount, activeCount);<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>          executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>          IdLock.Entry lockEntry = procExecutionLock.getLockEntry(proc.getProcId());<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>          try {<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>            executeProcedure(proc);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>          } catch (AssertionError e) {<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>            LOG.info("ASSERT pid=" + proc.getProcId(), e);<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>            throw e;<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>          } finally {<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>            procExecutionLock.releaseLockEntry(lockEntry);<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>            activeCount = activeExecutorCount.decrementAndGet();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>            runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>            LOG.trace("Halt pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>              runningCount, activeCount);<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>            this.activeProcedure = null;<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>            lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>            executionStartTime.set(Long.MAX_VALUE);<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>          }<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>        }<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>      } catch (Throwable t) {<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>        LOG.warn("Worker terminating UNNATURALLY {}", this.activeProcedure, t);<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>      } finally {<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>        LOG.trace("Worker terminated.");<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>      }<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>      workerThreads.remove(this);<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>    }<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span><a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    @Override<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>    public String toString() {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>      Procedure&lt;?&gt; p = this.activeProcedure;<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      return getName() + "(pid=" + (p == null? Procedure.NO_PROC_ID: p.getProcId() + ")");<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span><a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>    /**<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>     * @return the time since the current procedure is running<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>     */<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    public long getCurrentRunTime() {<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1994"></a>
 <span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>  }<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span><a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>  // A worker thread which can be added when core workers are stuck. Will timeout after<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>  // keepAliveTime if there is no procedure to run.<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>  private final class KeepAliveWorkerThread extends WorkerThread {<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span><a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    public KeepAliveWorkerThread(ThreadGroup group) {<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>      super(group, "KeepAlivePEWorker-");<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    }<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span><a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>    @Override<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>      return EnvironmentEdgeManager.currentTime() - lastUpdate &lt; keepAliveTime;<a name="line.2008"></a>
+<span class="sourceLineNo">1996</span><a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>    // core worker never timeout<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      return true;<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>  }<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span><a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>  // A worker thread which can be added when core workers are stuck. Will timeout after<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>  // keepAliveTime if there is no procedure to run.<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>  private final class KeepAliveWorkerThread extends WorkerThread {<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span><a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    public KeepAliveWorkerThread(ThreadGroup group) {<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>      super(group, "KeepAlivePEWorker-");<a name="line.2008"></a>
 <span class="sourceLineNo">2009</span>    }<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>  }<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span><a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>  // ----------------------------------------------------------------------------<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>  // full set of procedures pending and completed to write a compacted<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  // version of the log (in case is a log)?<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>  // will have the tracker saying everything is in the last log.<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  // ----------------------------------------------------------------------------<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span><a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>  private final class WorkerMonitor extends InlineChore {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.2023"></a>
+<span class="sourceLineNo">2010</span><a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>    @Override<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>      return EnvironmentEdgeManager.currentTime() - lastUpdate &lt; keepAliveTime;<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>    }<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>  }<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span><a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>  // ----------------------------------------------------------------------------<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>  // full set of procedures pending and completed to write a compacted<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  // version of the log (in case is a log)?<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>  // will have the tracker saying everything is in the last log.<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  // ----------------------------------------------------------------------------<a name="line.2023"></a>
 <span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span><a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span><a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span><a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>    public WorkerMonitor() {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>      refreshConfig();<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>    }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span><a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    @Override<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>    public void run() {<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>      final int stuckCount = checkForStuckWorkers();<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>      checkThreadCount(stuckCount);<a name="line.2044"></a>
+<span class="sourceLineNo">2025</span>  private final class WorkerMonitor extends InlineChore {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span><a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span><a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span><a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>    public WorkerMonitor() {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>      refreshConfig();<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>    }<a name="line.2044"></a>
 <span class="sourceLineNo">2045</span><a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>      // refresh interval (poor man dynamic conf update)<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>      refreshConfig();<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    }<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span><a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>    private int checkForStuckWorkers() {<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>      // check if any of the worker is stuck<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>      int stuckCount = 0;<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>      for (WorkerThread worker : workerThreads) {<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>          continue;<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        }<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span><a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // WARN the worker is stuck<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        stuckCount++;<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Worker stuck {}, run time {}", worker,<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>      }<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>      return stuckCount;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>    }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span><a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    private void checkThreadCount(final int stuckCount) {<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      // nothing to do if there are no runnable tasks<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) {<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>        return;<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>      }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>      // add a new thread if the worker stuck percentage exceed the threshold limit<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>      // and every handler is active.<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>      final float stuckPerc = ((float) stuckCount) / workerThreads.size();<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      // let's add new worker thread more aggressively, as they will timeout finally if there is no<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>      // work to do.<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>      if (stuckPerc &gt;= addWorkerStuckPercentage &amp;&amp; workerThreads.size() &lt; maxPoolSize) {<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>        final KeepAliveWorkerThread worker = new KeepAliveWorkerThread(threadGroup);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>        workerThreads.add(worker);<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>        worker.start();<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>        LOG.debug("Added new worker thread {}", worker);<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>      }<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>    }<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span><a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>    private void refreshConfig() {<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      addWorkerStuckPercentage = conf.getFloat(WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY,<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>          DEFAULT_WORKER_ADD_STUCK_PERCENTAGE);<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>      timeoutInterval = conf.getInt(WORKER_MONITOR_INTERVAL_CONF_KEY,<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>        DEFAULT_WORKER_MONITOR_INTERVAL);<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      stuckThreshold = conf.getInt(WORKER_STUCK_THRESHOLD_CONF_KEY,<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>        DEFAULT_WORKER_STUCK_THRESHOLD);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>    }<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span><a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>    @Override<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>    public int getTimeoutInterval() {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>      return timeoutInterval;<a name="line.2096"></a>
+<span class="sourceLineNo">2046</span>    @Override<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>    public void run() {<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>      final int stuckCount = checkForStuckWorkers();<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>      checkThreadCount(stuckCount);<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span><a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>      // refresh interval (poor man dynamic conf update)<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>      refreshConfig();<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>    }<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span><a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>    private int checkForStuckWorkers() {<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>      // check if any of the worker is stuck<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>      int stuckCount = 0;<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>      for (WorkerThread worker : workerThreads) {<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>          continue;<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        }<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span><a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // WARN the worker is stuck<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        stuckCount++;<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Worker stuck {}, run time {}", worker,<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>      return stuckCount;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span><a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>    private void checkThreadCount(final int stuckCount) {<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      // nothing to do if there are no runnable tasks<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) {<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>        return;<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>      }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>      // add a new thread if the worker stuck percentage exceed the threshold limit<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>      // and every handler is active.<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>      final float stuckPerc = ((float) stuckCount) / workerThreads.size();<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      // let's add new worker thread more aggressively, as they will timeout finally if there is no<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>      // work to do.<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>      if (stuckPerc &gt;= addWorkerStuckPercentage &amp;&amp; workerThreads.size() &lt; maxPoolSize) {<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>        final KeepAliveWorkerThread worker = new KeepAliveWorkerThread(threadGroup);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>        workerThreads.add(worker);<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>        worker.start();<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>        LOG.debug("Added new worker thread {}", worker);<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>      }<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>    }<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span><a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>    private void refreshConfig() {<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>      addWorkerStuckPercentage = conf.getFloat(WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY,<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>          DEFAULT_WORKER_ADD_STUCK_PERCENTAGE);<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>      timeoutInterval = conf.getInt(WORKER_MONITOR_INTERVAL_CONF_KEY,<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>        DEFAULT_WORKER_MONITOR_INTERVAL);<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      stuckThreshold = conf.getInt(WORKER_STUCK_THRESHOLD_CONF_KEY,<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>        DEFAULT_WORKER_STUCK_THRESHOLD);<a name="line.2096"></a>
 <span class="sourceLineNo">2097</span>    }<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>  }<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>}<a name="line.2099"></a>
+<span class="sourceLineNo">2098</span><a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>    @Override<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>    public int getTimeoutInterval() {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>      return timeoutInterval;<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>    }<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>  }<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>}<a name="line.2104"></a>
 
 
 


[14/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html
index 9fd7e0b..fb34e18 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html
@@ -1923,188 +1923,193 @@
 <span class="sourceLineNo">1915</span>    return completed.size();<a name="line.1915"></a>
 <span class="sourceLineNo">1916</span>  }<a name="line.1916"></a>
 <span class="sourceLineNo">1917</span><a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>  // ==========================================================================<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  //  Worker Thread<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>  // ==========================================================================<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>  private class WorkerThread extends StoppableThread {<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>    private volatile Procedure&lt;TEnvironment&gt; activeProcedure;<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span><a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>    public WorkerThread(ThreadGroup group) {<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>      this(group, "PEWorker-");<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>    }<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span><a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>    protected WorkerThread(ThreadGroup group, String prefix) {<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>      super(group, prefix + workerId.incrementAndGet());<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      setDaemon(true);<a name="line.1931"></a>
+<span class="sourceLineNo">1918</span>  @VisibleForTesting<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>  public IdLock getProcExecutionLock() {<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    return procExecutionLock;<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>  }<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span><a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>  // ==========================================================================<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  //  Worker Thread<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>  // ==========================================================================<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>  private class WorkerThread extends StoppableThread {<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>    private volatile Procedure&lt;TEnvironment&gt; activeProcedure;<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span><a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>    public WorkerThread(ThreadGroup group) {<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>      this(group, "PEWorker-");<a name="line.1931"></a>
 <span class="sourceLineNo">1932</span>    }<a name="line.1932"></a>
 <span class="sourceLineNo">1933</span><a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>    @Override<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>    public void sendStopSignal() {<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>      scheduler.signalAll();<a name="line.1936"></a>
+<span class="sourceLineNo">1934</span>    protected WorkerThread(ThreadGroup group, String prefix) {<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      super(group, prefix + workerId.incrementAndGet());<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>      setDaemon(true);<a name="line.1936"></a>
 <span class="sourceLineNo">1937</span>    }<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>    @Override<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>    public void run() {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      try {<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>        while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>          @SuppressWarnings("unchecked")<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>          Procedure&lt;TEnvironment&gt; proc = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>          if (proc == null) {<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>            continue;<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>          }<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>          this.activeProcedure = proc;<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>          int activeCount = activeExecutorCount.incrementAndGet();<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          int runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          LOG.trace("Execute pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>            runningCount, activeCount);<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>          IdLock.Entry lockEntry = procExecutionLock.getLockEntry(proc.getProcId());<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>          try {<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>            executeProcedure(proc);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>          } catch (AssertionError e) {<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>            LOG.info("ASSERT pid=" + proc.getProcId(), e);<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>            throw e;<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>          } finally {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>            procExecutionLock.releaseLockEntry(lockEntry);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>            activeCount = activeExecutorCount.decrementAndGet();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>            runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>            LOG.trace("Halt pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>              runningCount, activeCount);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>            this.activeProcedure = null;<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>            lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>            executionStartTime.set(Long.MAX_VALUE);<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>          }<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>        }<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>      } catch (Throwable t) {<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>        LOG.warn("Worker terminating UNNATURALLY {}", this.activeProcedure, t);<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>      } finally {<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>        LOG.trace("Worker terminated.");<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>      }<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>      workerThreads.remove(this);<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>    }<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span><a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    @Override<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>    public String toString() {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>      Procedure&lt;?&gt; p = this.activeProcedure;<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      return getName() + "(pid=" + (p == null? Procedure.NO_PROC_ID: p.getProcId() + ")");<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span><a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>    /**<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>     * @return the time since the current procedure is running<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>     */<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    public long getCurrentRunTime() {<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    }<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span><a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>    // core worker never timeout<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      return true;<a name="line.1994"></a>
+<span class="sourceLineNo">1938</span><a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>    @Override<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>    public void sendStopSignal() {<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>      scheduler.signalAll();<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    }<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>    @Override<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>    public void run() {<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>      try {<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>        while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>          @SuppressWarnings("unchecked")<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>          Procedure&lt;TEnvironment&gt; proc = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>          if (proc == null) {<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>            continue;<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>          }<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>          this.activeProcedure = proc;<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>          int activeCount = activeExecutorCount.incrementAndGet();<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>          int runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>          LOG.trace("Execute pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>            runningCount, activeCount);<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>          executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>          IdLock.Entry lockEntry = procExecutionLock.getLockEntry(proc.getProcId());<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>          try {<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>            executeProcedure(proc);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>          } catch (AssertionError e) {<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>            LOG.info("ASSERT pid=" + proc.getProcId(), e);<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>            throw e;<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>          } finally {<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>            procExecutionLock.releaseLockEntry(lockEntry);<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>            activeCount = activeExecutorCount.decrementAndGet();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>            runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>            LOG.trace("Halt pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>              runningCount, activeCount);<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>            this.activeProcedure = null;<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>            lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>            executionStartTime.set(Long.MAX_VALUE);<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>          }<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>        }<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>      } catch (Throwable t) {<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>        LOG.warn("Worker terminating UNNATURALLY {}", this.activeProcedure, t);<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>      } finally {<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>        LOG.trace("Worker terminated.");<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>      }<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>      workerThreads.remove(this);<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>    }<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span><a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    @Override<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>    public String toString() {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>      Procedure&lt;?&gt; p = this.activeProcedure;<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      return getName() + "(pid=" + (p == null? Procedure.NO_PROC_ID: p.getProcId() + ")");<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span><a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>    /**<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>     * @return the time since the current procedure is running<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>     */<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    public long getCurrentRunTime() {<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1994"></a>
 <span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>  }<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span><a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>  // A worker thread which can be added when core workers are stuck. Will timeout after<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>  // keepAliveTime if there is no procedure to run.<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>  private final class KeepAliveWorkerThread extends WorkerThread {<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span><a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    public KeepAliveWorkerThread(ThreadGroup group) {<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>      super(group, "KeepAlivePEWorker-");<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    }<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span><a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>    @Override<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>      return EnvironmentEdgeManager.currentTime() - lastUpdate &lt; keepAliveTime;<a name="line.2008"></a>
+<span class="sourceLineNo">1996</span><a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>    // core worker never timeout<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      return true;<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>  }<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span><a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>  // A worker thread which can be added when core workers are stuck. Will timeout after<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>  // keepAliveTime if there is no procedure to run.<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>  private final class KeepAliveWorkerThread extends WorkerThread {<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span><a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    public KeepAliveWorkerThread(ThreadGroup group) {<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>      super(group, "KeepAlivePEWorker-");<a name="line.2008"></a>
 <span class="sourceLineNo">2009</span>    }<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>  }<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span><a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>  // ----------------------------------------------------------------------------<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>  // full set of procedures pending and completed to write a compacted<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  // version of the log (in case is a log)?<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>  // will have the tracker saying everything is in the last log.<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  // ----------------------------------------------------------------------------<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span><a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>  private final class WorkerMonitor extends InlineChore {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.2023"></a>
+<span class="sourceLineNo">2010</span><a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>    @Override<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>      return EnvironmentEdgeManager.currentTime() - lastUpdate &lt; keepAliveTime;<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>    }<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>  }<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span><a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>  // ----------------------------------------------------------------------------<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>  // full set of procedures pending and completed to write a compacted<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  // version of the log (in case is a log)?<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>  // will have the tracker saying everything is in the last log.<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  // ----------------------------------------------------------------------------<a name="line.2023"></a>
 <span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span><a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span><a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span><a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>    public WorkerMonitor() {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>      refreshConfig();<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>    }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span><a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    @Override<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>    public void run() {<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>      final int stuckCount = checkForStuckWorkers();<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>      checkThreadCount(stuckCount);<a name="line.2044"></a>
+<span class="sourceLineNo">2025</span>  private final class WorkerMonitor extends InlineChore {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span><a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span><a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span><a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>    public WorkerMonitor() {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>      refreshConfig();<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>    }<a name="line.2044"></a>
 <span class="sourceLineNo">2045</span><a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>      // refresh interval (poor man dynamic conf update)<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>      refreshConfig();<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    }<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span><a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>    private int checkForStuckWorkers() {<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>      // check if any of the worker is stuck<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>      int stuckCount = 0;<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>      for (WorkerThread worker : workerThreads) {<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>          continue;<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        }<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span><a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // WARN the worker is stuck<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        stuckCount++;<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Worker stuck {}, run time {}", worker,<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>      }<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>      return stuckCount;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>    }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span><a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    private void checkThreadCount(final int stuckCount) {<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      // nothing to do if there are no runnable tasks<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) {<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>        return;<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>      }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>      // add a new thread if the worker stuck percentage exceed the threshold limit<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>      // and every handler is active.<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>      final float stuckPerc = ((float) stuckCount) / workerThreads.size();<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      // let's add new worker thread more aggressively, as they will timeout finally if there is no<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>      // work to do.<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>      if (stuckPerc &gt;= addWorkerStuckPercentage &amp;&amp; workerThreads.size() &lt; maxPoolSize) {<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>        final KeepAliveWorkerThread worker = new KeepAliveWorkerThread(threadGroup);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>        workerThreads.add(worker);<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>        worker.start();<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>        LOG.debug("Added new worker thread {}", worker);<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>      }<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>    }<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span><a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>    private void refreshConfig() {<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      addWorkerStuckPercentage = conf.getFloat(WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY,<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>          DEFAULT_WORKER_ADD_STUCK_PERCENTAGE);<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>      timeoutInterval = conf.getInt(WORKER_MONITOR_INTERVAL_CONF_KEY,<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>        DEFAULT_WORKER_MONITOR_INTERVAL);<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      stuckThreshold = conf.getInt(WORKER_STUCK_THRESHOLD_CONF_KEY,<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>        DEFAULT_WORKER_STUCK_THRESHOLD);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>    }<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span><a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>    @Override<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>    public int getTimeoutInterval() {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>      return timeoutInterval;<a name="line.2096"></a>
+<span class="sourceLineNo">2046</span>    @Override<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>    public void run() {<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>      final int stuckCount = checkForStuckWorkers();<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>      checkThreadCount(stuckCount);<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span><a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>      // refresh interval (poor man dynamic conf update)<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>      refreshConfig();<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>    }<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span><a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>    private int checkForStuckWorkers() {<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>      // check if any of the worker is stuck<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>      int stuckCount = 0;<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>      for (WorkerThread worker : workerThreads) {<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>          continue;<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        }<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span><a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // WARN the worker is stuck<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        stuckCount++;<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Worker stuck {}, run time {}", worker,<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>      return stuckCount;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span><a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>    private void checkThreadCount(final int stuckCount) {<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      // nothing to do if there are no runnable tasks<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) {<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>        return;<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>      }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>      // add a new thread if the worker stuck percentage exceed the threshold limit<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>      // and every handler is active.<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>      final float stuckPerc = ((float) stuckCount) / workerThreads.size();<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      // let's add new worker thread more aggressively, as they will timeout finally if there is no<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>      // work to do.<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>      if (stuckPerc &gt;= addWorkerStuckPercentage &amp;&amp; workerThreads.size() &lt; maxPoolSize) {<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>        final KeepAliveWorkerThread worker = new KeepAliveWorkerThread(threadGroup);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>        workerThreads.add(worker);<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>        worker.start();<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>        LOG.debug("Added new worker thread {}", worker);<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>      }<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>    }<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span><a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>    private void refreshConfig() {<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>      addWorkerStuckPercentage = conf.getFloat(WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY,<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>          DEFAULT_WORKER_ADD_STUCK_PERCENTAGE);<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>      timeoutInterval = conf.getInt(WORKER_MONITOR_INTERVAL_CONF_KEY,<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>        DEFAULT_WORKER_MONITOR_INTERVAL);<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      stuckThreshold = conf.getInt(WORKER_STUCK_THRESHOLD_CONF_KEY,<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>        DEFAULT_WORKER_STUCK_THRESHOLD);<a name="line.2096"></a>
 <span class="sourceLineNo">2097</span>    }<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>  }<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>}<a name="line.2099"></a>
+<span class="sourceLineNo">2098</span><a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>    @Override<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>    public int getTimeoutInterval() {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>      return timeoutInterval;<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>    }<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>  }<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>}<a name="line.2104"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html
index 9fd7e0b..fb34e18 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html
@@ -1923,188 +1923,193 @@
 <span class="sourceLineNo">1915</span>    return completed.size();<a name="line.1915"></a>
 <span class="sourceLineNo">1916</span>  }<a name="line.1916"></a>
 <span class="sourceLineNo">1917</span><a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>  // ==========================================================================<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  //  Worker Thread<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>  // ==========================================================================<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>  private class WorkerThread extends StoppableThread {<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>    private volatile Procedure&lt;TEnvironment&gt; activeProcedure;<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span><a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>    public WorkerThread(ThreadGroup group) {<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>      this(group, "PEWorker-");<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>    }<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span><a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>    protected WorkerThread(ThreadGroup group, String prefix) {<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>      super(group, prefix + workerId.incrementAndGet());<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      setDaemon(true);<a name="line.1931"></a>
+<span class="sourceLineNo">1918</span>  @VisibleForTesting<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>  public IdLock getProcExecutionLock() {<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    return procExecutionLock;<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>  }<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span><a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>  // ==========================================================================<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  //  Worker Thread<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>  // ==========================================================================<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>  private class WorkerThread extends StoppableThread {<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>    private volatile Procedure&lt;TEnvironment&gt; activeProcedure;<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span><a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>    public WorkerThread(ThreadGroup group) {<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>      this(group, "PEWorker-");<a name="line.1931"></a>
 <span class="sourceLineNo">1932</span>    }<a name="line.1932"></a>
 <span class="sourceLineNo">1933</span><a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>    @Override<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>    public void sendStopSignal() {<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>      scheduler.signalAll();<a name="line.1936"></a>
+<span class="sourceLineNo">1934</span>    protected WorkerThread(ThreadGroup group, String prefix) {<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      super(group, prefix + workerId.incrementAndGet());<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>      setDaemon(true);<a name="line.1936"></a>
 <span class="sourceLineNo">1937</span>    }<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>    @Override<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>    public void run() {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      try {<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>        while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>          @SuppressWarnings("unchecked")<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>          Procedure&lt;TEnvironment&gt; proc = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>          if (proc == null) {<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>            continue;<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>          }<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>          this.activeProcedure = proc;<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>          int activeCount = activeExecutorCount.incrementAndGet();<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          int runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          LOG.trace("Execute pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>            runningCount, activeCount);<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>          IdLock.Entry lockEntry = procExecutionLock.getLockEntry(proc.getProcId());<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>          try {<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>            executeProcedure(proc);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>          } catch (AssertionError e) {<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>            LOG.info("ASSERT pid=" + proc.getProcId(), e);<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>            throw e;<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>          } finally {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>            procExecutionLock.releaseLockEntry(lockEntry);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>            activeCount = activeExecutorCount.decrementAndGet();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>            runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>            LOG.trace("Halt pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>              runningCount, activeCount);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>            this.activeProcedure = null;<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>            lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>            executionStartTime.set(Long.MAX_VALUE);<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>          }<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>        }<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>      } catch (Throwable t) {<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>        LOG.warn("Worker terminating UNNATURALLY {}", this.activeProcedure, t);<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>      } finally {<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>        LOG.trace("Worker terminated.");<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>      }<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>      workerThreads.remove(this);<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>    }<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span><a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    @Override<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>    public String toString() {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>      Procedure&lt;?&gt; p = this.activeProcedure;<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      return getName() + "(pid=" + (p == null? Procedure.NO_PROC_ID: p.getProcId() + ")");<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span><a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>    /**<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>     * @return the time since the current procedure is running<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>     */<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    public long getCurrentRunTime() {<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    }<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span><a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>    // core worker never timeout<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      return true;<a name="line.1994"></a>
+<span class="sourceLineNo">1938</span><a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>    @Override<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>    public void sendStopSignal() {<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>      scheduler.signalAll();<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    }<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>    @Override<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>    public void run() {<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>      try {<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>        while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>          @SuppressWarnings("unchecked")<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>          Procedure&lt;TEnvironment&gt; proc = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>          if (proc == null) {<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>            continue;<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>          }<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>          this.activeProcedure = proc;<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>          int activeCount = activeExecutorCount.incrementAndGet();<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>          int runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>          LOG.trace("Execute pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>            runningCount, activeCount);<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>          executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>          IdLock.Entry lockEntry = procExecutionLock.getLockEntry(proc.getProcId());<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>          try {<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>            executeProcedure(proc);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>          } catch (AssertionError e) {<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>            LOG.info("ASSERT pid=" + proc.getProcId(), e);<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>            throw e;<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>          } finally {<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>            procExecutionLock.releaseLockEntry(lockEntry);<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>            activeCount = activeExecutorCount.decrementAndGet();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>            runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>            LOG.trace("Halt pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>              runningCount, activeCount);<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>            this.activeProcedure = null;<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>            lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>            executionStartTime.set(Long.MAX_VALUE);<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>          }<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>        }<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>      } catch (Throwable t) {<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>        LOG.warn("Worker terminating UNNATURALLY {}", this.activeProcedure, t);<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>      } finally {<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>        LOG.trace("Worker terminated.");<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>      }<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>      workerThreads.remove(this);<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>    }<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span><a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    @Override<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>    public String toString() {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>      Procedure&lt;?&gt; p = this.activeProcedure;<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      return getName() + "(pid=" + (p == null? Procedure.NO_PROC_ID: p.getProcId() + ")");<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span><a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>    /**<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>     * @return the time since the current procedure is running<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>     */<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    public long getCurrentRunTime() {<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1994"></a>
 <span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>  }<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span><a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>  // A worker thread which can be added when core workers are stuck. Will timeout after<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>  // keepAliveTime if there is no procedure to run.<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>  private final class KeepAliveWorkerThread extends WorkerThread {<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span><a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    public KeepAliveWorkerThread(ThreadGroup group) {<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>      super(group, "KeepAlivePEWorker-");<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    }<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span><a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>    @Override<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>      return EnvironmentEdgeManager.currentTime() - lastUpdate &lt; keepAliveTime;<a name="line.2008"></a>
+<span class="sourceLineNo">1996</span><a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>    // core worker never timeout<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      return true;<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>  }<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span><a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>  // A worker thread which can be added when core workers are stuck. Will timeout after<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>  // keepAliveTime if there is no procedure to run.<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>  private final class KeepAliveWorkerThread extends WorkerThread {<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span><a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    public KeepAliveWorkerThread(ThreadGroup group) {<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>      super(group, "KeepAlivePEWorker-");<a name="line.2008"></a>
 <span class="sourceLineNo">2009</span>    }<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>  }<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span><a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>  // ----------------------------------------------------------------------------<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>  // full set of procedures pending and completed to write a compacted<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  // version of the log (in case is a log)?<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>  // will have the tracker saying everything is in the last log.<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  // ----------------------------------------------------------------------------<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span><a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>  private final class WorkerMonitor extends InlineChore {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.2023"></a>
+<span class="sourceLineNo">2010</span><a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>    @Override<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>      return EnvironmentEdgeManager.currentTime() - lastUpdate &lt; keepAliveTime;<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>    }<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>  }<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span><a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>  // ----------------------------------------------------------------------------<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>  // full set of procedures pending and completed to write a compacted<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  // version of the log (in case is a log)?<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>  // will have the tracker saying everything is in the last log.<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  // ----------------------------------------------------------------------------<a name="line.2023"></a>
 <span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span><a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span><a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span><a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>    public WorkerMonitor() {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>      refreshConfig();<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>    }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span><a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    @Override<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>    public void run() {<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>      final int stuckCount = checkForStuckWorkers();<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>      checkThreadCount(stuckCount);<a name="line.2044"></a>
+<span class="sourceLineNo">2025</span>  private final class WorkerMonitor extends InlineChore {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span><a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span><a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span><a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>    public WorkerMonitor() {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>      refreshConfig();<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>    }<a name="line.2044"></a>
 <span class="sourceLineNo">2045</span><a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>      // refresh interval (poor man dynamic conf update)<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>      refreshConfig();<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    }<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span><a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>    private int checkForStuckWorkers() {<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>      // check if any of the worker is stuck<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>      int stuckCount = 0;<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>      for (WorkerThread worker : workerThreads) {<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>          continue;<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        }<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span><a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // WARN the worker is stuck<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        stuckCount++;<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Worker stuck {}, run time {}", worker,<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>      }<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>      return stuckCount;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>    }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span><a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    private void checkThreadCount(final int stuckCount) {<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      // nothing to do if there are no runnable tasks<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) {<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>        return;<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>      }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>      // add a new thread if the worker stuck percentage exceed the threshold limit<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>      // and every handler is active.<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>      final float stuckPerc = ((float) stuckCount) / workerThreads.size();<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      // let's add new worker thread more aggressively, as they will timeout finally if there is no<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>      // work to do.<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>      if (stuckPerc &gt;= addWorkerStuckPercentage &amp;&amp; workerThreads.size() &lt; maxPoolSize) {<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>        final KeepAliveWorkerThread worker = new KeepAliveWorkerThread(threadGroup);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>        workerThreads.add(worker);<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>        worker.start();<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>        LOG.debug("Added new worker thread {}", worker);<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>      }<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>    }<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span><a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>    private void refreshConfig() {<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      addWorkerStuckPercentage = conf.getFloat(WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY,<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>          DEFAULT_WORKER_ADD_STUCK_PERCENTAGE);<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>      timeoutInterval = conf.getInt(WORKER_MONITOR_INTERVAL_CONF_KEY,<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>        DEFAULT_WORKER_MONITOR_INTERVAL);<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      stuckThreshold = conf.getInt(WORKER_STUCK_THRESHOLD_CONF_KEY,<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>        DEFAULT_WORKER_STUCK_THRESHOLD);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>    }<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span><a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>    @Override<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>    public int getTimeoutInterval() {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>      return timeoutInterval;<a name="line.2096"></a>
+<span class="sourceLineNo">2046</span>    @Override<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>    public void run() {<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>      final int stuckCount = checkForStuckWorkers();<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>      checkThreadCount(stuckCount);<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span><a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>      // refresh interval (poor man dynamic conf update)<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>      refreshConfig();<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>    }<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span><a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>    private int checkForStuckWorkers() {<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>      // check if any of the worker is stuck<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>      int stuckCount = 0;<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>      for (WorkerThread worker : workerThreads) {<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>          continue;<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        }<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span><a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // WARN the worker is stuck<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        stuckCount++;<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Worker stuck {}, run time {}", worker,<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>      return stuckCount;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span><a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>    private void checkThreadCount(final int stuckCount) {<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      // nothing to do if there are no runnable tasks<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) {<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>        return;<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>      }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>      // add a new thread if the worker stuck percentage exceed the threshold limit<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>      // and every handler is active.<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>      final float stuckPerc = ((float) stuckCount) / workerThreads.size();<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      // let's add new worker thread more aggressively, as they will timeout finally if there is no<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>      // work to do.<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>      if (stuckPerc &gt;= addWorkerStuckPercentage &amp;&amp; workerThreads.size() &lt; maxPoolSize) {<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>        final KeepAliveWorkerThread worker = new KeepAliveWorkerThread(threadGroup);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>        workerThreads.add(worker);<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>        worker.start();<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>        LOG.debug("Added new worker thread {}", worker);<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>      }<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>    }<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span><a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>    private void refreshConfig() {<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>      addWorkerStuckPercentage = conf.getFloat(WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY,<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>          DEFAULT_WORKER_ADD_STUCK_PERCENTAGE);<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>      timeoutInterval = conf.getInt(WORKER_MONITOR_INTERVAL_CONF_KEY,<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>        DEFAULT_WORKER_MONITOR_INTERVAL);<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      stuckThreshold = conf.getInt(WORKER_STUCK_THRESHOLD_CONF_KEY,<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>        DEFAULT_WORKER_STUCK_THRESHOLD);<a name="line.2096"></a>
 <span class="sourceLineNo">2097</span>    }<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>  }<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>}<a name="line.2099"></a>
+<span class="sourceLineNo">2098</span><a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>    @Override<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>    public int getTimeoutInterval() {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>      return timeoutInterval;<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>    }<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>  }<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>}<a name="line.2104"></a>
 
 
 


[08/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
index 98ef11a..ab175b6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
@@ -256,1168 +256,1169 @@
 <span class="sourceLineNo">248</span>    this.leaseRecovery = leaseRecovery;<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    this.walDir = walDir;<a name="line.249"></a>
 <span class="sourceLineNo">250</span>    this.walArchiveDir = walArchiveDir;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    this.fs = walDir.getFileSystem(conf);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    this.enforceStreamCapability = conf.getBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE, true);<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>    // Create the log directory for the procedure store<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    if (!fs.exists(walDir)) {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      if (!fs.mkdirs(walDir)) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        throw new IOException("Unable to mkdir " + walDir);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    // Now that it exists, set the log policy<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    String storagePolicy =<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        conf.get(HConstants.WAL_STORAGE_POLICY, HConstants.DEFAULT_WAL_STORAGE_POLICY);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    CommonFSUtils.setStoragePolicy(fs, walDir, storagePolicy);<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>    // Create archive dir up front. Rename won't work w/o it up on HDFS.<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    if (this.walArchiveDir != null &amp;&amp; !this.fs.exists(this.walArchiveDir)) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      if (this.fs.mkdirs(this.walArchiveDir)) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        LOG.debug("Created Procedure Store WAL archive dir {}", this.walArchiveDir);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      } else {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        LOG.warn("Failed create of {}", this.walArchiveDir);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      }<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>  @Override<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public void start(int numSlots) throws IOException {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    if (!setRunning(true)) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      return;<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>    // Init buffer slots<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    loading.set(true);<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    runningProcCount = numSlots;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    syncMaxSlot = numSlots;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    slots = new ByteSlot[numSlots];<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    slotsCache = new LinkedTransferQueue&lt;&gt;();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    while (slotsCache.size() &lt; numSlots) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      slotsCache.offer(new ByteSlot());<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>    // Tunings<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    walCountWarnThreshold =<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      conf.getInt(WAL_COUNT_WARN_THRESHOLD_CONF_KEY, DEFAULT_WAL_COUNT_WARN_THRESHOLD);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    maxRetriesBeforeRoll =<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      conf.getInt(MAX_RETRIES_BEFORE_ROLL_CONF_KEY, DEFAULT_MAX_RETRIES_BEFORE_ROLL);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    maxSyncFailureRoll = conf.getInt(MAX_SYNC_FAILURE_ROLL_CONF_KEY, DEFAULT_MAX_SYNC_FAILURE_ROLL);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    waitBeforeRoll = conf.getInt(WAIT_BEFORE_ROLL_CONF_KEY, DEFAULT_WAIT_BEFORE_ROLL);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    rollRetries = conf.getInt(ROLL_RETRIES_CONF_KEY, DEFAULT_ROLL_RETRIES);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    rollThreshold = conf.getLong(ROLL_THRESHOLD_CONF_KEY, DEFAULT_ROLL_THRESHOLD);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    periodicRollMsec = conf.getInt(PERIODIC_ROLL_CONF_KEY, DEFAULT_PERIODIC_ROLL);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    syncWaitMsec = conf.getInt(SYNC_WAIT_MSEC_CONF_KEY, DEFAULT_SYNC_WAIT_MSEC);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    useHsync = conf.getBoolean(USE_HSYNC_CONF_KEY, DEFAULT_USE_HSYNC);<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span>    // WebUI<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    syncMetricsQueue = new CircularFifoQueue&lt;&gt;(<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      conf.getInt(STORE_WAL_SYNC_STATS_COUNT, DEFAULT_SYNC_STATS_COUNT));<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>    // Init sync thread<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    syncThread = new Thread("WALProcedureStoreSyncThread") {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      @Override<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      public void run() {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>        try {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>          syncLoop();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>        } catch (Throwable e) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>          LOG.error("Got an exception from the sync-loop", e);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          if (!isSyncAborted()) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>            sendAbortProcessSignal();<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      }<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    };<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    syncThread.start();<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  @Override<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  public void stop(final boolean abort) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    if (!setRunning(false)) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      return;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    }<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>    LOG.info("Stopping the WAL Procedure Store, isAbort=" + abort +<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      (isSyncAborted() ? " (self aborting)" : ""));<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    sendStopSignal();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    if (!isSyncAborted()) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      try {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        while (syncThread.isAlive()) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>          sendStopSignal();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>          syncThread.join(250);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      } catch (InterruptedException e) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        LOG.warn("join interrupted", e);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        Thread.currentThread().interrupt();<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>    // Close the writer<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    closeCurrentLogStream(abort);<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    // Close the old logs<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    // they should be already closed, this is just in case the load fails<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    // and we call start() and then stop()<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    for (ProcedureWALFile log: logs) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      log.close();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    logs.clear();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    loading.set(true);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  private void sendStopSignal() {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    if (lock.tryLock()) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      try {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        waitCond.signalAll();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        syncCond.signalAll();<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      } finally {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        lock.unlock();<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      }<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  }<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>  @Override<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  public int getNumThreads() {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    return slots == null ? 0 : slots.length;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>  @Override<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  public int setRunningProcedureCount(final int count) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    this.runningProcCount = count &gt; 0 ? Math.min(count, slots.length) : slots.length;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    return this.runningProcCount;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>  public ProcedureStoreTracker getStoreTracker() {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    return storeTracker;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  }<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>  public ArrayList&lt;ProcedureWALFile&gt; getActiveLogs() {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    lock.lock();<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      return new ArrayList&lt;&gt;(logs);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    } finally {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      lock.unlock();<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    }<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>  public Set&lt;ProcedureWALFile&gt; getCorruptedLogs() {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    return corruptedLogs;<a name="line.395"></a>
-<span class="sourceLineNo">396</span>  }<a name="line.396"></a>
-<span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span>  @Override<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  public void recoverLease() throws IOException {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    lock.lock();<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    try {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      LOG.debug("Starting WAL Procedure Store lease recovery");<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      boolean afterFirstAttempt = false;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      while (isRunning()) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        // Don't sleep before first attempt<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        if (afterFirstAttempt) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>          LOG.trace("Sleep {} ms after first lease recovery attempt.",<a name="line.407"></a>
-<span class="sourceLineNo">408</span>              waitBeforeRoll);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          Threads.sleepWithoutInterrupt(waitBeforeRoll);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>        } else {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>          afterFirstAttempt = true;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        FileStatus[] oldLogs = getLogFiles();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        // Get Log-MaxID and recover lease on old logs<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        try {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>          flushLogId = initOldLogs(oldLogs);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        } catch (FileNotFoundException e) {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>          LOG.warn("Someone else is active and deleted logs. retrying.", e);<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          continue;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>        // Create new state-log<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        if (!rollWriter(flushLogId + 1)) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          // someone else has already created this log<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          LOG.debug("Someone else has already created log {}. Retrying.", flushLogId);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>          continue;<a name="line.426"></a>
-<span class="sourceLineNo">427</span>        }<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>        // We have the lease on the log<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        oldLogs = getLogFiles();<a name="line.430"></a>
-<span class="sourceLineNo">431</span>        if (getMaxLogId(oldLogs) &gt; flushLogId) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>          LOG.debug("Someone else created new logs. Expected maxLogId &lt; {}", flushLogId);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>          logs.getLast().removeFile(this.walArchiveDir);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          continue;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>        }<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>        LOG.debug("Lease acquired for flushLogId={}", flushLogId);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        break;<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      }<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    } finally {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      lock.unlock();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  }<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>  @Override<a name="line.445"></a>
-<span class="sourceLineNo">446</span>  public void load(ProcedureLoader loader) throws IOException {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    lock.lock();<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    try {<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      if (logs.isEmpty()) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        throw new RuntimeException("recoverLease() must be called before loading data");<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      }<a name="line.451"></a>
-<span class="sourceLineNo">452</span><a name="line.452"></a>
-<span class="sourceLineNo">453</span>      // Nothing to do, If we have only the current log.<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      if (logs.size() == 1) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        LOG.debug("No state logs to replay.");<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        loader.setMaxProcId(0);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        return;<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // Load the old logs<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      Iterator&lt;ProcedureWALFile&gt; it = logs.descendingIterator();<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      it.next(); // Skip the current log<a name="line.462"></a>
-<span class="sourceLineNo">463</span><a name="line.463"></a>
-<span class="sourceLineNo">464</span>      ProcedureWALFormat.load(it, storeTracker, new ProcedureWALFormat.Loader() {<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>        @Override<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        public void setMaxProcId(long maxProcId) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>          loader.setMaxProcId(maxProcId);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>        }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>        @Override<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        public void load(ProcedureIterator procIter) throws IOException {<a name="line.472"></a>
-<span class="sourceLineNo">473</span>          loader.load(procIter);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        }<a name="line.474"></a>
-<span class="sourceLineNo">475</span><a name="line.475"></a>
-<span class="sourceLineNo">476</span>        @Override<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>          loader.handleCorrupted(procIter);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        }<a name="line.479"></a>
-<span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span>        @Override<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        public void markCorruptedWAL(ProcedureWALFile log, IOException e) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>          if (corruptedLogs == null) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>            corruptedLogs = new HashSet&lt;&gt;();<a name="line.484"></a>
-<span class="sourceLineNo">485</span>          }<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          corruptedLogs.add(log);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>          // TODO: sideline corrupted log<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      });<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    } finally {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      try {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        // try to cleanup inactive wals and complete the operation<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        buildHoldingCleanupTracker();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        tryCleanupLogsOnLoad();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        loading.set(false);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      } finally {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>        lock.unlock();<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    }<a name="line.499"></a>
-<span class="sourceLineNo">500</span>  }<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>  private void tryCleanupLogsOnLoad() {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    // nothing to cleanup.<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    if (logs.size() &lt;= 1) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      return;<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span>    // the config says to not cleanup wals on load.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    if (!conf.getBoolean(EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY,<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY)) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      LOG.debug("WALs cleanup on load is not enabled: " + getActiveLogs());<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      return;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    }<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>    try {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      periodicRoll();<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    } catch (IOException e) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      LOG.warn("Unable to cleanup logs on load: " + e.getMessage(), e);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    }<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>  @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span>  public void insert(Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (LOG.isTraceEnabled()) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.trace("Insert " + proc + ", subproc=" + Arrays.toString(subprocs));<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>    ByteSlot slot = acquireSlot();<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    try {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      // Serialize the insert<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      long[] subProcIds = null;<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      if (subprocs != null) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        ProcedureWALFormat.writeInsert(slot, proc, subprocs);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        subProcIds = new long[subprocs.length];<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          subProcIds[i] = subprocs[i].getProcId();<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        }<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      } else {<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        assert !proc.hasParent();<a name="line.539"></a>
-<span class="sourceLineNo">540</span>        ProcedureWALFormat.writeInsert(slot, proc);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>      // Push the transaction data and wait until it is persisted<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      pushData(PushType.INSERT, slot, proc.getProcId(), subProcIds);<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    } catch (IOException e) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      // We are not able to serialize the procedure.<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      // this is a code error, and we are not able to go on.<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: proc=" +<a name="line.548"></a>
-<span class="sourceLineNo">549</span>          proc + ", subprocs=" + Arrays.toString(subprocs), e);<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      throw new RuntimeException(e);<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    } finally {<a name="line.551"></a>
-<span class="sourceLineNo">552</span>      releaseSlot(slot);<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>  @Override<a name="line.556"></a>
-<span class="sourceLineNo">557</span>  public void insert(Procedure&lt;?&gt;[] procs) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    if (LOG.isTraceEnabled()) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      LOG.trace("Insert " + Arrays.toString(procs));<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
-<span class="sourceLineNo">561</span><a name="line.561"></a>
-<span class="sourceLineNo">562</span>    ByteSlot slot = acquireSlot();<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    try {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      // Serialize the insert<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      long[] procIds = new long[procs.length];<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>        assert !procs[i].hasParent();<a name="line.567"></a>
-<span class="sourceLineNo">568</span>        procIds[i] = procs[i].getProcId();<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        ProcedureWALFormat.writeInsert(slot, procs[i]);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>      // Push the transaction data and wait until it is persisted<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      pushData(PushType.INSERT, slot, Procedure.NO_PROC_ID, procIds);<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    } catch (IOException e) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      // We are not able to serialize the procedure.<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      // this is a code error, and we are not able to go on.<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: " +<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          Arrays.toString(procs), e);<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      throw new RuntimeException(e);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    } finally {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      releaseSlot(slot);<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    }<a name="line.582"></a>
-<span class="sourceLineNo">583</span>  }<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>  @Override<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  public void update(Procedure&lt;?&gt; proc) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    if (LOG.isTraceEnabled()) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>      LOG.trace("Update " + proc);<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    }<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span>    ByteSlot slot = acquireSlot();<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    try {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      // Serialize the update<a name="line.593"></a>
-<span class="sourceLineNo">594</span>      ProcedureWALFormat.writeUpdate(slot, proc);<a name="line.594"></a>
-<span class="sourceLineNo">595</span><a name="line.595"></a>
-<span class="sourceLineNo">596</span>      // Push the transaction data and wait until it is persisted<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      pushData(PushType.UPDATE, slot, proc.getProcId(), null);<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    } catch (IOException e) {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      // We are not able to serialize the procedure.<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      // this is a code error, and we are not able to go on.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      throw new RuntimeException(e);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    } finally {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      releaseSlot(slot);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>  }<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span>  @Override<a name="line.608"></a>
-<span class="sourceLineNo">609</span>  public void delete(long procId) {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    LOG.trace("Delete {}", procId);<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    ByteSlot slot = acquireSlot();<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    try {<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      // Serialize the delete<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      ProcedureWALFormat.writeDelete(slot, procId);<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>      // Push the transaction data and wait until it is persisted<a name="line.616"></a>
-<span class="sourceLineNo">617</span>      pushData(PushType.DELETE, slot, procId, null);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    } catch (IOException e) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      // We are not able to serialize the procedure.<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      // this is a code error, and we are not able to go on.<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + procId, e);<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      throw new RuntimeException(e);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    } finally {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>      releaseSlot(slot);<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    }<a name="line.625"></a>
-<span class="sourceLineNo">626</span>  }<a name="line.626"></a>
-<span class="sourceLineNo">627</span><a name="line.627"></a>
-<span class="sourceLineNo">628</span>  @Override<a name="line.628"></a>
-<span class="sourceLineNo">629</span>  public void delete(Procedure&lt;?&gt; proc, long[] subProcIds) {<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    assert proc != null : "expected a non-null procedure";<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    assert subProcIds != null &amp;&amp; subProcIds.length &gt; 0 : "expected subProcIds";<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    if (LOG.isTraceEnabled()) {<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      LOG.trace("Update " + proc + " and Delete " + Arrays.toString(subProcIds));<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    }<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>    ByteSlot slot = acquireSlot();<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    try {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      // Serialize the delete<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      ProcedureWALFormat.writeDelete(slot, proc, subProcIds);<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span>      // Push the transaction data and wait until it is persisted<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      pushData(PushType.DELETE, slot, proc.getProcId(), subProcIds);<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    } catch (IOException e) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      // We are not able to serialize the procedure.<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      // this is a code error, and we are not able to go on.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      throw new RuntimeException(e);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    } finally {<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      releaseSlot(slot);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    }<a name="line.650"></a>
-<span class="sourceLineNo">651</span>  }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>  @Override<a name="line.653"></a>
-<span class="sourceLineNo">654</span>  public void delete(final long[] procIds, final int offset, final int count) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    if (count == 0) return;<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    if (offset == 0 &amp;&amp; count == procIds.length) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      delete(procIds);<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    } else if (count == 1) {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>      delete(procIds[offset]);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    } else {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      delete(Arrays.copyOfRange(procIds, offset, offset + count));<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    }<a name="line.662"></a>
-<span class="sourceLineNo">663</span>  }<a name="line.663"></a>
-<span class="sourceLineNo">664</span><a name="line.664"></a>
-<span class="sourceLineNo">665</span>  private void delete(long[] procIds) {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    if (LOG.isTraceEnabled()) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      LOG.trace("Delete " + Arrays.toString(procIds));<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>    final ByteSlot slot = acquireSlot();<a name="line.670"></a>
-<span class="sourceLineNo">671</span>    try {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>      // Serialize the delete<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.673"></a>
-<span class="sourceLineNo">674</span>        ProcedureWALFormat.writeDelete(slot, procIds[i]);<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      }<a name="line.675"></a>
-<span class="sourceLineNo">676</span><a name="line.676"></a>
-<span class="sourceLineNo">677</span>      // Push the transaction data and wait until it is persisted<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      pushData(PushType.DELETE, slot, Procedure.NO_PROC_ID, procIds);<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    } catch (IOException e) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      // We are not able to serialize the procedure.<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      // this is a code error, and we are not able to go on.<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      LOG.error("Unable to serialize the procedures: " + Arrays.toString(procIds), e);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      throw new RuntimeException(e);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    } finally {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      releaseSlot(slot);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    }<a name="line.686"></a>
-<span class="sourceLineNo">687</span>  }<a name="line.687"></a>
-<span class="sourceLineNo">688</span><a name="line.688"></a>
-<span class="sourceLineNo">689</span>  private ByteSlot acquireSlot() {<a name="line.689"></a>
-<span class="sourceLineNo">690</span>    ByteSlot slot = slotsCache.poll();<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    return slot != null ? slot : new ByteSlot();<a name="line.691"></a>
-<span class="sourceLineNo">692</span>  }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>  private void releaseSlot(final ByteSlot slot) {<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    slot.reset();<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    slotsCache.offer(slot);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>  }<a name="line.697"></a>
-<span class="sourceLineNo">698</span><a name="line.698"></a>
-<span class="sourceLineNo">699</span>  private enum PushType { INSERT, UPDATE, DELETE }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span>  private long pushData(final PushType type, final ByteSlot slot,<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      final long procId, final long[] subProcIds) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    if (!isRunning()) {<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      throw new RuntimeException("the store must be running before inserting data");<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    }<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    if (logs.isEmpty()) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      throw new RuntimeException("recoverLease() must be called before inserting data");<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    }<a name="line.708"></a>
-<span class="sourceLineNo">709</span><a name="line.709"></a>
-<span class="sourceLineNo">710</span>    long logId = -1;<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    lock.lock();<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    try {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>      // Wait for the sync to be completed<a name="line.713"></a>
-<span class="sourceLineNo">714</span>      while (true) {<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        if (!isRunning()) {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>          throw new RuntimeException("store no longer running");<a name="line.716"></a>
-<span class="sourceLineNo">717</span>        } else if (isSyncAborted()) {<a name="line.717"></a>
-<span class="sourceLineNo">718</span>          throw new RuntimeException("sync aborted", syncException.get());<a name="line.718"></a>
-<span class="sourceLineNo">719</span>        } else if (inSync.get()) {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>          syncCond.await();<a name="line.720"></a>
-<span class="sourceLineNo">721</span>        } else if (slotIndex &gt;= syncMaxSlot) {<a name="line.721"></a>
-<span class="sourceLineNo">722</span>          slotCond.signal();<a name="line.722"></a>
-<span class="sourceLineNo">723</span>          syncCond.await();<a name="line.723"></a>
-<span class="sourceLineNo">724</span>        } else {<a name="line.724"></a>
-<span class="sourceLineNo">725</span>          break;<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        }<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>      final long pushSyncId = syncId.get();<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      updateStoreTracker(type, procId, subProcIds);<a name="line.730"></a>
-<span class="sourceLineNo">731</span>      slots[slotIndex++] = slot;<a name="line.731"></a>
-<span class="sourceLineNo">732</span>      logId = flushLogId;<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>      // Notify that there is new data<a name="line.734"></a>
-<span class="sourceLineNo">735</span>      if (slotIndex == 1) {<a name="line.735"></a>
-<span class="sourceLineNo">736</span>        waitCond.signal();<a name="line.736"></a>
-<span class="sourceLineNo">737</span>      }<a name="line.737"></a>
-<span class="sourceLineNo">738</span><a name="line.738"></a>
-<span class="sourceLineNo">739</span>      // Notify that the slots are full<a name="line.739"></a>
-<span class="sourceLineNo">740</span>      if (slotIndex == syncMaxSlot) {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>        waitCond.signal();<a name="line.741"></a>
-<span class="sourceLineNo">742</span>        slotCond.signal();<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span>      while (pushSyncId == syncId.get() &amp;&amp; isRunning()) {<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        syncCond.await();<a name="line.746"></a>
-<span class="sourceLineNo">747</span>      }<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    } catch (InterruptedException e) {<a name="line.748"></a>
-<span class="sourceLineNo">749</span>      Thread.currentThread().interrupt();<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      sendAbortProcessSignal();<a name="line.750"></a>
-<span class="sourceLineNo">751</span>      throw new RuntimeException(e);<a name="line.751"></a>
-<span class="sourceLineNo">752</span>    } finally {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>      lock.unlock();<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      if (isSyncAborted()) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>        throw new RuntimeException("sync aborted", syncException.get());<a name="line.755"></a>
-<span class="sourceLineNo">756</span>      }<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    }<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    return logId;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>  }<a name="line.759"></a>
-<span class="sourceLineNo">760</span><a name="line.760"></a>
-<span class="sourceLineNo">761</span>  private void updateStoreTracker(final PushType type,<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      final long procId, final long[] subProcIds) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    switch (type) {<a name="line.763"></a>
-<span class="sourceLineNo">764</span>      case INSERT:<a name="line.764"></a>
-<span class="sourceLineNo">765</span>        if (subProcIds == null) {<a name="line.765"></a>
-<span class="sourceLineNo">766</span>          storeTracker.insert(procId);<a name="line.766"></a>
-<span class="sourceLineNo">767</span>        } else if (procId == Procedure.NO_PROC_ID) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>          storeTracker.insert(subProcIds);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>        } else {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>          storeTracker.insert(procId, subProcIds);<a name="line.770"></a>
-<span class="sourceLineNo">771</span>          holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.771"></a>
-<span class="sourceLineNo">772</span>        }<a name="line.772"></a>
-<span class="sourceLineNo">773</span>        break;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>      case UPDATE:<a name="line.774"></a>
-<span class="sourceLineNo">775</span>        storeTracker.update(procId);<a name="line.775"></a>
-<span class="sourceLineNo">776</span>        holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>        break;<a name="line.777"></a>
-<span class="sourceLineNo">778</span>      case DELETE:<a name="line.778"></a>
-<span class="sourceLineNo">779</span>        if (subProcIds != null &amp;&amp; subProcIds.length &gt; 0) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>          storeTracker.delete(subProcIds);<a name="line.780"></a>
-<span class="sourceLineNo">781</span>          holdingCleanupTracker.setDeletedIfModified(subProcIds);<a name="line.781"></a>
-<span class="sourceLineNo">782</span>        } else {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>          storeTracker.delete(procId);<a name="line.783"></a>
-<span class="sourceLineNo">784</span>          holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        }<a name="line.785"></a>
-<span class="sourceLineNo">786</span>        break;<a name="line.786"></a>
-<span class="sourceLineNo">787</span>      default:<a name="line.787"></a>
-<span class="sourceLineNo">788</span>        throw new RuntimeException("invalid push type " + type);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
-<span class="sourceLineNo">790</span>  }<a name="line.790"></a>
-<span class="sourceLineNo">791</span><a name="line.791"></a>
-<span class="sourceLineNo">792</span>  private boolean isSyncAborted() {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    return syncException.get() != null;<a name="line.793"></a>
-<span class="sourceLineNo">794</span>  }<a name="line.794"></a>
-<span class="sourceLineNo">795</span><a name="line.795"></a>
-<span class="sourceLineNo">796</span>  private void syncLoop() throws Throwable {<a name="line.796"></a>
-<span class="sourceLineNo">797</span>    long totalSyncedToStore = 0;<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    inSync.set(false);<a name="line.798"></a>
-<span class="sourceLineNo">799</span>    lock.lock();<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    try {<a name="line.800"></a>
-<span class="sourceLineNo">801</span>      while (isRunning()) {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>        try {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>          // Wait until new data is available<a name="line.803"></a>
-<span class="sourceLineNo">804</span>          if (slotIndex == 0) {<a name="line.804"></a>
-<span class="sourceLineNo">805</span>            if (!loading.get()) {<a name="line.805"></a>
-<span class="sourceLineNo">806</span>              periodicRoll();<a name="line.806"></a>
-<span class="sourceLineNo">807</span>            }<a name="line.807"></a>
-<span class="sourceLineNo">808</span><a name="line.808"></a>
-<span class="sourceLineNo">809</span>            if (LOG.isTraceEnabled()) {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>              float rollTsSec = getMillisFromLastRoll() / 1000.0f;<a name="line.810"></a>
-<span class="sourceLineNo">811</span>              LOG.trace(String.format("Waiting for data. flushed=%s (%s/sec)",<a name="line.811"></a>
-<span class="sourceLineNo">812</span>                        StringUtils.humanSize(totalSynced.get()),<a name="line.812"></a>
-<span class="sourceLineNo">813</span>                        StringUtils.humanSize(totalSynced.get() / rollTsSec)));<a name="line.813"></a>
-<span class="sourceLineNo">814</span>            }<a name="line.814"></a>
-<span class="sourceLineNo">815</span><a name="line.815"></a>
-<span class="sourceLineNo">816</span>            waitCond.await(getMillisToNextPeriodicRoll(), TimeUnit.MILLISECONDS);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>            if (slotIndex == 0) {<a name="line.817"></a>
-<span class="sourceLineNo">818</span>              // no data.. probably a stop() or a periodic roll<a name="line.818"></a>
-<span class="sourceLineNo">819</span>              continue;<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>          // Wait SYNC_WAIT_MSEC or the signal of "slots full" before flushing<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          syncMaxSlot = runningProcCount;<a name="line.823"></a>
-<span class="sourceLineNo">824</span>          assert syncMaxSlot &gt; 0 : "unexpected syncMaxSlot=" + syncMaxSlot;<a name="line.824"></a>
-<span class="sourceLineNo">825</span>          final long syncWaitSt = System.currentTimeMillis();<a name="line.825"></a>
-<span class="sourceLineNo">826</span>          if (slotIndex != syncMaxSlot) {<a name="line.826"></a>
-<span class="sourceLineNo">827</span>            slotCond.await(syncWaitMsec, TimeUnit.MILLISECONDS);<a name="line.827"></a>
-<span class="sourceLineNo">828</span>          }<a name="line.828"></a>
-<span class="sourceLineNo">829</span><a name="line.829"></a>
-<span class="sourceLineNo">830</span>          final long currentTs = System.currentTimeMillis();<a name="line.830"></a>
-<span class="sourceLineNo">831</span>          final long syncWaitMs = currentTs - syncWaitSt;<a name="line.831"></a>
-<span class="sourceLineNo">832</span>          final float rollSec = getMillisFromLastRoll() / 1000.0f;<a name="line.832"></a>
-<span class="sourceLineNo">833</span>          final float syncedPerSec = totalSyncedToStore / rollSec;<a name="line.833"></a>
-<span class="sourceLineNo">834</span>          if (LOG.isTraceEnabled() &amp;&amp; (syncWaitMs &gt; 10 || slotIndex &lt; syncMaxSlot)) {<a name="line.834"></a>
-<span class="sourceLineNo">835</span>            LOG.trace(String.format("Sync wait %s, slotIndex=%s , totalSynced=%s (%s/sec)",<a name="line.835"></a>
-<span class="sourceLineNo">836</span>                      StringUtils.humanTimeDiff(syncWaitMs), slotIndex,<a name="line.836"></a>
-<span class="sourceLineNo">837</span>                      StringUtils.humanSize(totalSyncedToStore),<a name="line.837"></a>
-<span class="sourceLineNo">838</span>                      StringUtils.humanSize(syncedPerSec)));<a name="line.838"></a>
-<span class="sourceLineNo">839</span>          }<a name="line.839"></a>
-<span class="sourceLineNo">840</span><a name="line.840"></a>
-<span class="sourceLineNo">841</span>          // update webui circular buffers (TODO: get rid of allocations)<a name="line.841"></a>
-<span class="sourceLineNo">842</span>          final SyncMetrics syncMetrics = new SyncMetrics();<a name="line.842"></a>
-<span class="sourceLineNo">843</span>          syncMetrics.timestamp = currentTs;<a name="line.843"></a>
-<span class="sourceLineNo">844</span>          syncMetrics.syncWaitMs = syncWaitMs;<a name="line.844"></a>
-<span class="sourceLineNo">845</span>          syncMetrics.syncedEntries = slotIndex;<a name="line.845"></a>
-<span class="sourceLineNo">846</span>          syncMetrics.totalSyncedBytes = totalSyncedToStore;<a name="line.846"></a>
-<span class="sourceLineNo">847</span>          syncMetrics.syncedPerSec = syncedPerSec;<a name="line.847"></a>
-<span class="sourceLineNo">848</span>          syncMetricsQueue.add(syncMetrics);<a name="line.848"></a>
-<span class="sourceLineNo">849</span><a name="line.849"></a>
-<span class="sourceLineNo">850</span>          // sync<a name="line.850"></a>
-<span class="sourceLineNo">851</span>          inSync.set(true);<a name="line.851"></a>
-<span class="sourceLineNo">852</span>          long slotSize = syncSlots();<a name="line.852"></a>
-<span class="sourceLineNo">853</span>          logs.getLast().addToSize(slotSize);<a name="line.853"></a>
-<span class="sourceLineNo">854</span>          totalSyncedToStore = totalSynced.addAndGet(slotSize);<a name="line.854"></a>
-<span class="sourceLineNo">855</span>          slotIndex = 0;<a name="line.855"></a>
-<span class="sourceLineNo">856</span>          inSync.set(false);<a name="line.856"></a>
-<span class="sourceLineNo">857</span>          syncId.incrementAndGet();<a name="line.857"></a>
-<span class="sourceLineNo">858</span>        } catch (InterruptedException e) {<a name="line.858"></a>
-<span class="sourceLineNo">859</span>          Thread.currentThread().interrupt();<a name="line.859"></a>
-<span class="sourceLineNo">860</span>          syncException.compareAndSet(null, e);<a name="line.860"></a>
-<span class="sourceLineNo">861</span>          sendAbortProcessSignal();<a name="line.861"></a>
-<span class="sourceLineNo">862</span>          throw e;<a name="line.862"></a>
-<span class="sourceLineNo">863</span>        } catch (Throwable t) {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>          syncException.compareAndSet(null, t);<a name="line.864"></a>
-<span class="sourceLineNo">865</span>          sendAbortProcessSignal();<a name="line.865"></a>
-<span class="sourceLineNo">866</span>          throw t;<a name="line.866"></a>
-<span class="sourceLineNo">867</span>        } finally {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>          syncCond.signalAll();<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        }<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      }<a name="line.870"></a>
-<span class="sourceLineNo">871</span>    } finally {<a name="line.871"></a>
-<span class="sourceLineNo">872</span>      lock.unlock();<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    }<a name="line.873"></a>
-<span class="sourceLineNo">874</span>  }<a name="line.874"></a>
-<span class="sourceLineNo">875</span><a name="line.875"></a>
-<span class="sourceLineNo">876</span>  public ArrayList&lt;SyncMetrics&gt; getSyncMetrics() {<a name="line.876"></a>
-<span class="sourceLineNo">877</span>    lock.lock();<a name="line.877"></a>
-<span class="sourceLineNo">878</span>    try {<a name="line.878"></a>
-<span class="sourceLineNo">879</span>      return new ArrayList&lt;&gt;(syncMetricsQueue);<a name="line.879"></a>
-<span class="sourceLineNo">880</span>    } finally {<a name="line.880"></a>
-<span class="sourceLineNo">881</span>      lock.unlock();<a name="line.881"></a>
-<span class="sourceLineNo">882</span>    }<a name="line.882"></a>
-<span class="sourceLineNo">883</span>  }<a name="line.883"></a>
-<span class="sourceLineNo">884</span><a name="line.884"></a>
-<span class="sourceLineNo">885</span>  private long syncSlots() throws Throwable {<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    int retry = 0;<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    int logRolled = 0;<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    long totalSynced = 0;<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    do {<a name="line.889"></a>
-<span class="sourceLineNo">890</span>      try {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>        totalSynced = syncSlots(stream, slots, 0, slotIndex);<a name="line.891"></a>
-<span class="sourceLineNo">892</span>        break;<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      } catch (Throwable e) {<a name="line.893"></a>
-<span class="sourceLineNo">894</span>        LOG.warn("unable to sync slots, retry=" + retry);<a name="line.894"></a>
-<span class="sourceLineNo">895</span>        if (++retry &gt;= maxRetriesBeforeRoll) {<a name="line.895"></a>
-<span class="sourceLineNo">896</span>          if (logRolled &gt;= maxSyncFailureRoll &amp;&amp; isRunning()) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>            LOG.error("Sync slots after log roll failed, abort.", e);<a name="line.897"></a>
-<span class="sourceLineNo">898</span>            throw e;<a name="line.898"></a>
-<span class="sourceLineNo">899</span>          }<a name="line.899"></a>
-<span class="sourceLineNo">900</span><a name="line.900"></a>
-<span class="sourceLineNo">901</span>          if (!rollWriterWithRetries()) {<a name="line.901"></a>
-<span class="sourceLineNo">902</span>            throw e;<a name="line.902"></a>
-<span class="sourceLineNo">903</span>          }<a name="line.903"></a>
-<span class="sourceLineNo">904</span><a name="line.904"></a>
-<span class="sourceLineNo">905</span>          logRolled++;<a name="line.905"></a>
-<span class="sourceLineNo">906</span>          retry = 0;<a name="line.906"></a>
-<span class="sourceLineNo">907</span>        }<a name="line.907"></a>
-<span class="sourceLineNo">908</span>      }<a name="line.908"></a>
-<span class="sourceLineNo">909</span>    } while (isRunning());<a name="line.909"></a>
-<span class="sourceLineNo">910</span>    return totalSynced;<a name="line.910"></a>
-<span class="sourceLineNo">911</span>  }<a name="line.911"></a>
-<span class="sourceLineNo">912</span><a name="line.912"></a>
-<span class="sourceLineNo">913</span>  protected long syncSlots(final FSDataOutputStream stream, final ByteSlot[] slots,<a name="line.913"></a>
-<span class="sourceLineNo">914</span>      final int offset, final int count) throws IOException {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>    long totalSynced = 0;<a name="line.915"></a>
-<span class="sourceLineNo">916</span>    for (int i = 0; i &lt; count; ++i) {<a name="line.916"></a>
-<span class="sourceLineNo">917</span>      final ByteSlot data = slots[offset + i];<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      data.writeTo(stream);<a name="line.918"></a>
-<span class="sourceLineNo">919</span>      totalSynced += data.size();<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    }<a name="line.920"></a>
-<span class="sourceLineNo">921</span><a name="line.921"></a>
-<span class="sourceLineNo">922</span>    syncStream(stream);<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    sendPostSyncSignal();<a name="line.923"></a>
-<span class="sourceLineNo">924</span><a name="line.924"></a>
-<span class="sourceLineNo">925</span>    if (LOG.isTraceEnabled()) {<a name="line.925"></a>
-<span class="sourceLineNo">926</span>      LOG.trace("Sync slots=" + count + '/' + syncMaxSlot +<a name="line.926"></a>
-<span class="sourceLineNo">927</span>                ", flushed=" + StringUtils.humanSize(totalSynced));<a name="line.927"></a>
-<span class="sourceLineNo">928</span>    }<a name="line.928"></a>
-<span class="sourceLineNo">929</span>    return totalSynced;<a name="line.929"></a>
-<span class="sourceLineNo">930</span>  }<a name="line.930"></a>
-<span class="sourceLineNo">931</span><a name="line.931"></a>
-<span class="sourceLineNo">932</span>  protected void syncStream(final FSDataOutputStream stream) throws IOException {<a name="line.932"></a>
-<span class="sourceLineNo">933</span>    if (useHsync) {<a name="line.933"></a>
-<span class="sourceLineNo">934</span>      stream.hsync();<a name="line.934"></a>
-<span class="sourceLineNo">935</span>    } else {<a name="line.935"></a>
-<span class="sourceLineNo">936</span>      stream.hflush();<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    }<a name="line.937"></a>
-<span class="sourceLineNo">938</span>  }<a name="line.938"></a>
-<span class="sourceLineNo">939</span><a name="line.939"></a>
-<span class="sourceLineNo">940</span>  private boolean rollWriterWithRetries() {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    for (int i = 0; i &lt; rollRetries &amp;&amp; isRunning(); ++i) {<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      if (i &gt; 0) Threads.sleepWithoutInterrupt(waitBeforeRoll * i);<a name="line.942"></a>
-<span class="sourceLineNo">943</span><a name="line.943"></a>
-<span class="sourceLineNo">944</span>      try {<a name="line.944"></a>
-<span class="sourceLineNo">945</span>        if (rollWriter()) {<a name="line.945"></a>
-<span class="sourceLineNo">946</span>          return true;<a name="line.946"></a>
-<span class="sourceLineNo">947</span>        }<a name="line.947"></a>
-<span class="sourceLineNo">948</span>      } catch (IOException e) {<a name="line.948"></a>
-<span class="sourceLineNo">949</span>        LOG.warn("Unable to roll the log, attempt=" + (i + 1), e);<a name="line.949"></a>
-<span class="sourceLineNo">950</span>      }<a name="line.950"></a>
-<span class="sourceLineNo">951</span>    }<a name="line.951"></a>
-<span class="sourceLineNo">952</span>    LOG.error(HBaseMarkers.FATAL, "Unable to roll the log");<a name="line.952"></a>
-<span class="sourceLineNo">953</span>    return false;<a name="line.953"></a>
-<span class="sourceLineNo">954</span>  }<a name="line.954"></a>
-<span class="sourceLineNo">955</span><a name="line.955"></a>
-<span class="sourceLineNo">956</span>  private boolean tryRollWriter() {<a name="line.956"></a>
-<span class="sourceLineNo">957</span>    try {<a name="line.957"></a>
-<span class="sourceLineNo">958</span>      return rollWriter();<a name="line.958"></a>
-<span class="sourceLineNo">959</span>    } catch (IOException e) {<a name="line.959"></a>
-<span class="sourceLineNo">960</span>      LOG.warn("Unable to roll the log", e);<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      return false;<a name="line.961"></a>
-<span class="sourceLineNo">962</span>    }<a name="line.962"></a>
-<span class="sourceLineNo">963</span>  }<a name="line.963"></a>
-<span class="sourceLineNo">964</span><a name="line.964"></a>
-<span class="sourceLineNo">965</span>  public long getMillisToNextPeriodicRoll() {<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    if (lastRollTs.get() &gt; 0 &amp;&amp; periodicRollMsec &gt; 0) {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>      return periodicRollMsec - getMillisFromLastRoll();<a name="line.967"></a>
-<span class="sourceLineNo">968</span>    }<a name="line.968"></a>
-<span class="sourceLineNo">969</span>    return Long.MAX_VALUE;<a name="line.969"></a>
-<span class="sourceLineNo">970</span>  }<a name="line.970"></a>
-<span class="sourceLineNo">971</span><a name="line.971"></a>
-<span class="sourceLineNo">972</span>  public long getMillisFromLastRoll() {<a name="line.972"></a>
-<span class="sourceLineNo">973</span>    return (System.currentTimeMillis() - lastRollTs.get());<a name="line.973"></a>
-<span class="sourceLineNo">974</span>  }<a name="line.974"></a>
-<span class="sourceLineNo">975</span><a name="line.975"></a>
-<span class="sourceLineNo">976</span>  @VisibleForTesting<a name="line.976"></a>
-<span class="sourceLineNo">977</span>  void periodicRollForTesting() throws IOException {<a name="line.977"></a>
-<span class="sourceLineNo">978</span>    lock.lock();<a name="line.978"></a>
-<span class="sourceLineNo">979</span>    try {<a name="line.979"></a>
-<span class="sourceLineNo">980</span>      periodicRoll();<a name="line.980"></a>
-<span class="sourceLineNo">981</span>    } finally {<a name="line.981"></a>
-<span class="sourceLineNo">982</span>      lock.unlock();<a name="line.982"></a>
-<span class="sourceLineNo">983</span>    }<a name="line.983"></a>
-<span class="sourceLineNo">984</span>  }<a name="line.984"></a>
-<span class="sourceLineNo">985</span><a name="line.985"></a>
-<span class="sourceLineNo">986</span>  @VisibleForTesting<a name="line.986"></a>
-<span class="sourceLineNo">987</span>  public boolean rollWriterForTesting() throws IOException {<a name="line.987"></a>
-<span class="sourceLineNo">988</span>    lock.lock();<a name="line.988"></a>
-<span class="sourceLineNo">989</span>    try {<a name="line.989"></a>
-<span class="sourceLineNo">990</span>      return rollWriter();<a name="line.990"></a>
-<span class="sourceLineNo">991</span>    } finally {<a name="line.991"></a>
-<span class="sourceLineNo">992</span>      lock.unlock();<a name="line.992"></a>
-<span class="sourceLineNo">993</span>    }<a name="line.993"></a>
-<span class="sourceLineNo">994</span>  }<a name="line.994"></a>
-<span class="sourceLineNo">995</span><a name="line.995"></a>
-<span class="sourceLineNo">996</span>  @VisibleForTesting<a name="line.996"></a>
-<span class="sourceLineNo">997</span>  void removeInactiveLogsForTesting() throws Exception {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>    lock.lock();<a name="line.998"></a>
-<span class="sourceLineNo">999</span>    try {<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>      removeInactiveLogs();<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>    } finally  {<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>      lock.unlock();<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>    }<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>  }<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span><a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>  private void periodicRoll() throws IOException {<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>    if (storeTracker.isEmpty()) {<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>      LOG.trace("no active procedures");<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>      tryRollWriter();<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>      removeAllLogs(flushLogId - 1, "no active procedures");<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>    } else {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      if (storeTracker.isAllModified()) {<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>        LOG.trace("all the active procedures are in the latest log");<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>        removeAllLogs(flushLogId - 1, "all the active procedures are in the latest log");<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>      }<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span><a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>      // if the log size has exceeded the roll threshold<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>      // or the periodic roll timeout is expired, try to roll the wal.<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>      if (totalSynced.get() &gt; rollThreshold || getMillisToNextPeriodicRoll() &lt;= 0) {<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>        tryRollWriter();<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>      }<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span><a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>      removeInactiveLogs();<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>    }<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>  }<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>  private boolean rollWriter() throws IOException {<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    if (!isRunning()) {<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>      return false;<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    }<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span><a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>    // Create new state-log<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>    if (!rollWriter(flushLogId + 1)) {<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      LOG.warn("someone else has already created log {}", flushLogId);<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>      return false;<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>    }<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span><a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>    // We have the lease on the log,<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>    // but we should check if someone else has created new files<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>    if (getMaxLogId(getLogFiles()) &gt; flushLogId) {<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>      LOG.warn("Someone else created new logs. Expected maxLogId &lt; {}", flushLogId);<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>      logs.getLast().removeFile(this.walArchiveDir);<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>      return false;<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    }<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span><a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    // We have the lease on the log<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>    return true;<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>  }<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span><a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>  @VisibleForTesting<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>  boolean rollWriter(long logId) throws IOException {<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    assert logId &gt; flushLogId : "logId=" + logId + " flushLogId=" + flushLogId;<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    assert lock.isHeldByCurrentThread() : "expected to be the lock owner. " + lock.isLocked();<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span><a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    ProcedureWALHeader header = ProcedureWALHeader.newBuilder()<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>      .setVersion(ProcedureWALFormat.HEADER_VERSION)<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>      .setType(ProcedureWALFormat.LOG_TYPE_STREAM)<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>      .setMinProcId(storeTracker.getActiveMinProcId())<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      .setLogId(logId)<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      .build();<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span><a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    FSDataOutputStream newStream = null;<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>    Path newLogFile = null;<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    long startPos = -1;<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    newLogFile = getLogFilePath(logId);<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    try {<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>      newStream = CommonFSUtils.createForWal(fs, newLogFile, false);<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    } catch (FileAlreadyExistsException e) {<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>      LOG.error("Log file with id={} already exists", logId, e);<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>      return false;<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    } catch (RemoteException re) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      LOG.warn("failed to create log file with id={}", logId, re);<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>      return false;<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    }<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    // After we create the stream but before we attempt to use it at all<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    // ensure that we can provide the level of data safety we're configured<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    // to provide.<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>    final String durability = useHsync ? "hsync" : "hflush";<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    if (enforceStreamCapability &amp;&amp; !(CommonFSUtils.hasCapability(newStream, durability))) {<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>        throw new IllegalStateException("The procedure WAL relies on the ability to " + durability +<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>          " for proper operation during component failures, but the underlying filesystem does " +<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>          "not support doing so. Please check the config value of '" + USE_HSYNC_CONF_KEY +<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>          "' to set the desired level of robustness and ensure the config value of '" +<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>          CommonFSUtils.HBASE_WAL_DIR + "' points to a FileSystem mount that can provide it.");<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>    }<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    try {<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>      ProcedureWALFormat.writeHeader(newStream, header);<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>      startPos = newStream.getPos();<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    } catch (IOException ioe) {<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>      LOG.warn("Encountered exception writing header", ioe);<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>      newStream.close();<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      return false;<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>    }<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span><a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    closeCurrentLogStream(false);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span><a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>    storeTracker.resetModified();<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>    stream = newStream;<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>    flushLogId = logId;<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>    totalSynced.set(0);<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    long rollTs = System.currentTimeMillis();<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    lastRollTs.set(rollTs);<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    logs.add(new ProcedureWALFile(fs, newLogFile, header, startPos, rollTs));<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span><a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    // if it's the first next WAL being added, build the holding cleanup tracker<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    if (logs.size() == 2) {<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>      buildHoldingCleanupTracker();<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    } else if (logs.size() &gt; walCountWarnThreshold) {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      LOG.warn("procedure WALs count={} above the warning threshold {}. check running procedures" +<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>        " to see if something is stuck.", logs.size(), walCountWarnThreshold);<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>      // This is just like what we have done at RS side when there are too many wal files. For RS,<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>      // if there are too many wal files, we will find out the wal entries in the oldest file, and<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>      // tell the upper layer to flush these regions so the wal entries will be useless and then we<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>      // can delete the wal file. For WALProcedureStore, the assumption is that, if all the<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>      // procedures recorded in a proc wal file are modified or deleted in a new proc wal file, then<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>      // we are safe to delete it. So here if there are too many proc wal files, we will find out<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>      // the procedure ids in the oldest file, which are neither modified nor deleted in newer proc<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>      // wal files, and tell upper layer to update the state of these procedures to the newest proc<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>      // wal file(by calling ProcedureStore.update), then we are safe to delete the oldest proc wal<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>      // file.<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>      sendForceUpdateSignal(holdingCleanupTracker.getAllActiveProcIds());<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>    }<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span><a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>    LOG.info("Rolled new Procedure Store WAL, id={}", logId);<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    return true;<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>  }<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span><a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>  private void closeCurrentLogStream(boolean abort) {<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    if (stream == null || logs.isEmpty()) {<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>      return;<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>    try {<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>      ProcedureWALFile log = logs.getLast();<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>      log.setProcIds(storeTracker.getModifiedMinProcId(), storeTracker.getModifiedMaxProcId());<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>      log.updateLocalTracker(storeTracker);<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>      if (!abort) {<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>        long trailerSize = ProcedureWALFormat.writeTrailer(stream, storeTracker);<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>        log.addToSize(trailerSize);<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>      }<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>    } catch (IOException e) {<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>      LOG.warn("Unable to write the trailer", e);<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    }<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>    try {<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>      stream.close();<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    } catch (IOException e) {<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>      LOG.error("Unable to close the stream", e);<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>    }<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    stream = null;<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>  }<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span><a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>  // ==========================================================================<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>  //  Log Files cleaner helpers<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>  // ==========================================================================<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>  private void removeInactiveLogs() throws IOException {<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>    // We keep track of which procedures are holding the oldest WAL in 'holdingCleanupTracker'.<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    // once there is nothing olding the oldest WAL we can remove it.<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>    while (logs.size() &gt; 1 &amp;&amp; holdingCleanupTracker.isEmpty()) {<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>      LOG.info("Remove the oldest log {}", logs.getFirst());<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      removeLogFile(logs.getFirst(), walArchiveDir);<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>      buildHoldingCleanupTracker();<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>    }<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span><a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>    // TODO: In case we are holding up a lot of logs for long time we should<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    // rewrite old procedures (in theory parent procs) to the new WAL.<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>  }<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span><a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>  private void buildHoldingCleanupTracker() {<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    if (logs.size() &lt;= 1) {<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>      // we only have one wal, so nothing to do<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>      holdingCleanupTracker.reset();<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>      return;<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    }<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span><a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    // compute the holding tracker.<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>    // - the first WAL is used for the 'updates'<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    // - the global tracker will be used to determine whether a procedure has been deleted<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>    // - other trackers will be used to determine whether a procedure has been updated, as a deleted<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    // procedure can always be detected by checking the global tracker, we can save the deleted<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>    // checks when applying other trackers<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>    holdingCleanupTracker.resetTo(logs.getFirst().getTracker(), true);<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>    holdingCleanupTracker.setDeletedIfDeletedByThem(storeTracker);<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>    // the logs is a linked list, so avoid calling get(index) on it.<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>    Iterator&lt;ProcedureWALFile&gt; iter = logs.iterator();<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    // skip the tracker for the first file when creating the iterator.<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    iter.next();<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>    ProcedureStoreTracker tracker = iter.next().getTracker();<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>    // testing iter.hasNext after calling iter.next to skip applying the tracker for last file,<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>    // which is just the storeTracker above.<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span

<TRUNCATED>

[06/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/testdevapidocs/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html
index 8485393..662355e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.86">MockMasterServices</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.84">MockMasterServices</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMasterServices.html" title="class in org.apache.hadoop.hbase.master">MockNoopMasterServices</a></pre>
 <div class="block">A mocked master services.
  Tries to fake it. May not always work.</div>
@@ -364,7 +364,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>fileSystemManager</h4>
-<pre>private final&nbsp;org.apache.hadoop.hbase.master.MasterFileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.87">fileSystemManager</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.hbase.master.MasterFileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.85">fileSystemManager</a></pre>
 </li>
 </ul>
 <a name="walManager">
@@ -373,7 +373,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>walManager</h4>
-<pre>private final&nbsp;org.apache.hadoop.hbase.master.MasterWalManager <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.88">walManager</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.hbase.master.MasterWalManager <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.86">walManager</a></pre>
 </li>
 </ul>
 <a name="assignmentManager">
@@ -382,7 +382,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>assignmentManager</h4>
-<pre>private final&nbsp;org.apache.hadoop.hbase.master.assignment.AssignmentManager <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.89">assignmentManager</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.hbase.master.assignment.AssignmentManager <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.87">assignmentManager</a></pre>
 </li>
 </ul>
 <a name="tableStateManager">
@@ -391,7 +391,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>tableStateManager</h4>
-<pre>private final&nbsp;org.apache.hadoop.hbase.master.TableStateManager <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.90">tableStateManager</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.hbase.master.TableStateManager <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.88">tableStateManager</a></pre>
 </li>
 </ul>
 <a name="procedureEnv">
@@ -400,7 +400,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>procedureEnv</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.92">procedureEnv</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.90">procedureEnv</a></pre>
 </li>
 </ul>
 <a name="procedureExecutor">
@@ -409,7 +409,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>procedureExecutor</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.procedure2.ProcedureExecutor&lt;org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.93">procedureExecutor</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.procedure2.ProcedureExecutor&lt;org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.91">procedureExecutor</a></pre>
 </li>
 </ul>
 <a name="procedureStore">
@@ -418,7 +418,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>procedureStore</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.procedure2.store.ProcedureStore <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.94">procedureStore</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.procedure2.store.ProcedureStore <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.92">procedureStore</a></pre>
 </li>
 </ul>
 <a name="connection">
@@ -427,7 +427,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>connection</h4>
-<pre>private final&nbsp;org.apache.hadoop.hbase.client.ClusterConnection <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.95">connection</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.hbase.client.ClusterConnection <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.93">connection</a></pre>
 </li>
 </ul>
 <a name="balancer">
@@ -436,7 +436,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>balancer</h4>
-<pre>private final&nbsp;org.apache.hadoop.hbase.master.LoadBalancer <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.96">balancer</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.hbase.master.LoadBalancer <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.94">balancer</a></pre>
 </li>
 </ul>
 <a name="serverManager">
@@ -445,7 +445,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>serverManager</h4>
-<pre>private final&nbsp;org.apache.hadoop.hbase.master.ServerManager <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.97">serverManager</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.hbase.master.ServerManager <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.95">serverManager</a></pre>
 </li>
 </ul>
 <a name="regionsToRegionServers">
@@ -454,7 +454,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>regionsToRegionServers</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;org.apache.hadoop.hbase.ServerName,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a>&lt;byte[]&gt;&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.99">regionsToRegionServers</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;org.apache.hadoop.hbase.ServerName,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a>&lt;byte[]&gt;&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.97">regionsToRegionServers</a></pre>
 </li>
 </ul>
 <a name="initialized">
@@ -463,7 +463,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>initialized</h4>
-<pre>private final&nbsp;org.apache.hadoop.hbase.procedure2.ProcedureEvent <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.101">initialized</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.hbase.procedure2.ProcedureEvent <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.99">initialized</a></pre>
 </li>
 </ul>
 <a name="DEFAULT_COLUMN_FAMILY_NAME">
@@ -472,7 +472,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_COLUMN_FAMILY_NAME</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.102">DEFAULT_COLUMN_FAMILY_NAME</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.100">DEFAULT_COLUMN_FAMILY_NAME</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.assignment.MockMasterServices.DEFAULT_COLUMN_FAMILY_NAME">Constant Field Values</a></dd>
@@ -485,7 +485,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MOCK_MASTER_SERVERNAME</h4>
-<pre>public static final&nbsp;org.apache.hadoop.hbase.ServerName <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.103">MOCK_MASTER_SERVERNAME</a></pre>
+<pre>public static final&nbsp;org.apache.hadoop.hbase.ServerName <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.101">MOCK_MASTER_SERVERNAME</a></pre>
 </li>
 </ul>
 </li>
@@ -502,7 +502,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MockMasterServices</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.106">MockMasterServices</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.104">MockMasterServices</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;org.apache.hadoop.hbase.ServerName,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a>&lt;byte[]&gt;&gt;&nbsp;regionsToRegionServers)
                    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>
@@ -525,7 +525,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.179">start</a>(int&nbsp;numServes,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.173">start</a>(int&nbsp;numServes,
                   org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher&nbsp;remoteDispatcher)
            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>
@@ -542,7 +542,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>restartRegionServer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.198">restartRegionServer</a>(org.apache.hadoop.hbase.ServerName&nbsp;serverName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.192">restartRegionServer</a>(org.apache.hadoop.hbase.ServerName&nbsp;serverName)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Call this restart method only after running MockMasterServices#start()
  The RSs can be differentiated by the port number, see
@@ -562,7 +562,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.215">stop</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;why)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.209">stop</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;why)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>stop</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Stoppable</code></dd>
@@ -577,7 +577,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>startProcedureExecutor</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.220">startProcedureExecutor</a>(org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher&nbsp;remoteDispatcher)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.214">startProcedureExecutor</a>(org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher&nbsp;remoteDispatcher)
                              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>
@@ -591,7 +591,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>stopProcedureExecutor</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.249">stopProcedureExecutor</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.243">stopProcedureExecutor</a>()</pre>
 </li>
 </ul>
 <a name="isInitialized--">
@@ -600,7 +600,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>isInitialized</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.264">isInitialized</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.258">isInitialized</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>isInitialized</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.master.MasterServices</code></dd>
@@ -615,7 +615,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>getInitializedEvent</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.procedure2.ProcedureEvent&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.269">getInitializedEvent</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.procedure2.ProcedureEvent&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.263">getInitializedEvent</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getInitializedEvent</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.master.MasterServices</code></dd>
@@ -630,7 +630,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterFileSystem</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.master.MasterFileSystem&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.274">getMasterFileSystem</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.master.MasterFileSystem&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.268">getMasterFileSystem</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getMasterFileSystem</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.master.MasterServices</code></dd>
@@ -645,7 +645,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterWalManager</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.master.MasterWalManager&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.279">getMasterWalManager</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.master.MasterWalManager&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.273">getMasterWalManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getMasterWalManager</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.master.MasterServices</code></dd>
@@ -660,7 +660,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterProcedureExecutor</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.procedure2.ProcedureExecutor&lt;org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.284">getMasterProcedureExecutor</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.procedure2.ProcedureExecutor&lt;org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.278">getMasterProcedureExecutor</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getMasterProcedureExecutor</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.master.MasterServices</code></dd>
@@ -675,7 +675,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>getLoadBalancer</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.master.LoadBalancer&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.289">getLoadBalancer</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.master.LoadBalancer&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.283">getLoadBalancer</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getLoadBalancer</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.master.MasterServices</code></dd>
@@ -690,7 +690,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerManager</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.master.ServerManager&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.294">getServerManager</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.master.ServerManager&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.288">getServerManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getServerManager</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.master.MasterServices</code></dd>
@@ -705,7 +705,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>getAssignmentManager</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.master.assignment.AssignmentManager&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.299">getAssignmentManager</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.master.assignment.AssignmentManager&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.293">getAssignmentManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getAssignmentManager</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.master.MasterServices</code></dd>
@@ -720,7 +720,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableStateManager</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.master.TableStateManager&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.304">getTableStateManager</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.master.TableStateManager&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.298">getTableStateManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getTableStateManager</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.master.MasterServices</code></dd>
@@ -735,7 +735,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>getConnection</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.ClusterConnection&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.309">getConnection</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.client.ClusterConnection&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.303">getConnection</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getConnection</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Server</code></dd>
@@ -750,7 +750,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerName</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.ServerName&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.314">getServerName</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.ServerName&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.308">getServerName</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getServerName</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Server</code></dd>
@@ -765,7 +765,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>getCoordinatedStateManager</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.CoordinatedStateManager&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.319">getCoordinatedStateManager</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.CoordinatedStateManager&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.313">getCoordinatedStateManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getCoordinatedStateManager</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Server</code></dd>
@@ -780,7 +780,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableDescriptors</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.TableDescriptors&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.334">getTableDescriptors</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.TableDescriptors&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.328">getTableDescriptors</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getTableDescriptors</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.master.MasterServices</code></dd>
@@ -795,7 +795,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMaster
 <ul class="blockListLast">
 <li class="blockList">
 <h4>buildMultiResponse</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.375">buildMultiResponse</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest&nbsp;req)</pre>
+<pre>private static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.369">buildMultiResponse</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest&nbsp;req)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionStates.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionStates.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionStates.html
index 040500a..7494e7b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionStates.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionStates.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionReplicaSplit.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestRegionStates.html" target="_top">Frames</a></li>
@@ -502,7 +502,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionReplicaSplit.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestRegionStates.html" target="_top">Frames</a></li>

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

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


[22/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/org/apache/hadoop/hbase/master/assignment/class-use/ServerStateNode.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/class-use/ServerStateNode.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/class-use/ServerStateNode.html
index 4c932d0..44fe1fc 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/class-use/ServerStateNode.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/class-use/ServerStateNode.html
@@ -144,23 +144,14 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
+<td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#checkOnlineRegionsReport-org.apache.hadoop.hbase.master.assignment.ServerStateNode-java.util.Set-">checkOnlineRegionsReport</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">ServerStateNode</a>&nbsp;serverNode,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt;&nbsp;regionNames)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#checkOnlineRegionsReportForMeta-org.apache.hadoop.hbase.master.assignment.ServerStateNode-java.util.Set-">checkOnlineRegionsReportForMeta</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">ServerStateNode</a>&nbsp;serverNode,
-                               <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt;&nbsp;regionNames)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><span class="typeNameLabel">ServerStateNode.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/ServerStateNode.html#compareTo-org.apache.hadoop.hbase.master.assignment.ServerStateNode-">compareTo</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">ServerStateNode</a>&nbsp;other)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#killRegionServer-org.apache.hadoop.hbase.master.assignment.ServerStateNode-">killRegionServer</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">ServerStateNode</a>&nbsp;serverNode)</code>&nbsp;</td>
-</tr>
 <tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#reportTransition-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.master.assignment.ServerStateNode-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-long-">reportTransition</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
index abd92a9..1799704 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
@@ -198,8 +198,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.LocalityType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.Action.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.LocalityType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index 92d2987..a26a606 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -347,11 +347,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html
index e03c710..3cd7650 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html
@@ -129,7 +129,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.50">EnableTableProcedure</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.49">EnableTableProcedure</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/AbstractStateMachineTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">AbstractStateMachineTableProcedure</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.EnableTableState&gt;</pre>
 </li>
 </ul>
@@ -183,14 +183,10 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#LOG">LOG</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#skipTableStateCheck">skipTableStateCheck</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#tableName">tableName</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#traceEnabled">traceEnabled</a></span></code>&nbsp;</td>
 </tr>
@@ -226,16 +222,14 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#EnableTableProcedure--">EnableTableProcedure</a></span>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#EnableTableProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-boolean-">EnableTableProcedure</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
-                    <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
-                    boolean&nbsp;skipTableStateCheck)</code>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#EnableTableProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-">EnableTableProcedure</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+                    <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Constructor</div>
 </td>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#EnableTableProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-boolean-org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch-">EnableTableProcedure</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#EnableTableProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch-">EnableTableProcedure</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                     <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
-                    boolean&nbsp;skipTableStateCheck,
                     <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a>&nbsp;syncLatch)</code>
 <div class="block">Constructor</div>
 </td>
@@ -425,7 +419,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.52">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.51">LOG</a></pre>
 </li>
 </ul>
 <a name="tableName">
@@ -434,16 +428,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>tableName</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.54">tableName</a></pre>
-</li>
-</ul>
-<a name="skipTableStateCheck">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>skipTableStateCheck</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.55">skipTableStateCheck</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.53">tableName</a></pre>
 </li>
 </ul>
 <a name="traceEnabled">
@@ -452,7 +437,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockListLast">
 <li class="blockList">
 <h4>traceEnabled</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.57">traceEnabled</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.55">traceEnabled</a></pre>
 </li>
 </ul>
 </li>
@@ -469,43 +454,39 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>EnableTableProcedure</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.59">EnableTableProcedure</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.57">EnableTableProcedure</a>()</pre>
 </li>
 </ul>
-<a name="EnableTableProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-boolean-">
+<a name="EnableTableProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>EnableTableProcedure</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.69">EnableTableProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
-                            <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
-                            boolean&nbsp;skipTableStateCheck)</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.65">EnableTableProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+                            <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block">Constructor</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>env</code> - MasterProcedureEnv</dd>
 <dd><code>tableName</code> - the table to operate on</dd>
-<dd><code>skipTableStateCheck</code> - whether to check table state</dd>
 </dl>
 </li>
 </ul>
-<a name="EnableTableProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-boolean-org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch-">
+<a name="EnableTableProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>EnableTableProcedure</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.80">EnableTableProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.74">EnableTableProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                             <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
-                            boolean&nbsp;skipTableStateCheck,
                             <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a>&nbsp;syncLatch)</pre>
 <div class="block">Constructor</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>env</code> - MasterProcedureEnv</dd>
 <dd><code>tableName</code> - the table to operate on</dd>
-<dd><code>skipTableStateCheck</code> - whether to check table state</dd>
 </dl>
 </li>
 </ul>
@@ -523,7 +504,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>executeFromState</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.88">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.81">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                                       org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.EnableTableState&nbsp;state)
                                                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"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#executeFromState-TEnvironment-TState-">StateMachineProcedure</a></code></span></div>
@@ -546,7 +527,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumberOfReplicasFromMeta</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.200">getNumberOfReplicasFromMeta</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.193">getNumberOfReplicasFromMeta</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                                         int&nbsp;regionReplicaCount,
                                         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regionsOfTable)
                                  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>
@@ -562,7 +543,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionFromMeta</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.215">getRegionFromMeta</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.208">getRegionFromMeta</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regionsOfTable)
                           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>
@@ -577,7 +558,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>rollbackState</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.226">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.219">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                              org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.EnableTableState&nbsp;state)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#rollbackState-TEnvironment-TState-">StateMachineProcedure</a></code></span></div>
@@ -597,7 +578,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>isRollbackSupported</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.245">isRollbackSupported</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.EnableTableState&nbsp;state)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.238">isRollbackSupported</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.EnableTableState&nbsp;state)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#isRollbackSupported-TState-">StateMachineProcedure</a></code></span></div>
 <div class="block">Used by the default implementation of abort() to know if the current state can be aborted
  and rollback can be triggered.</div>
@@ -613,7 +594,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getState</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.EnableTableState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.256">getState</a>(int&nbsp;stateId)</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.EnableTableState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.249">getState</a>(int&nbsp;stateId)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getState-int-">StateMachineProcedure</a></code></span></div>
 <div class="block">Convert an ordinal (or state id) to an Enum (or more descriptive) state object.</div>
 <dl>
@@ -632,7 +613,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getStateId</h4>
-<pre>protected&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.261">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.EnableTableState&nbsp;state)</pre>
+<pre>protected&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.254">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.EnableTableState&nbsp;state)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getStateId-TState-">StateMachineProcedure</a></code></span></div>
 <div class="block">Convert the Enum (or more descriptive) state object to an ordinal (or state id).</div>
 <dl>
@@ -651,7 +632,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getInitialState</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.EnableTableState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.266">getInitialState</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.EnableTableState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.259">getInitialState</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getInitialState--">StateMachineProcedure</a></code></span></div>
 <div class="block">Return the initial state object that will be used for the first call to executeFromState().</div>
 <dl>
@@ -668,7 +649,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>serializeStateData</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.271">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.264">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
 <div class="block">The user-level code of the procedure may have some state to
@@ -690,7 +671,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>deserializeStateData</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.285">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.278">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
 <div class="block">Called on store load to allow the user to decode the previously serialized
@@ -711,7 +692,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableName</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.297">getTableName</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.288">getTableName</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html#getTableName--">getTableName</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface</a></code></dd>
@@ -728,7 +709,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableOperationType</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface.TableOperationType</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.302">getTableOperationType</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface.TableOperationType</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.293">getTableOperationType</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html#getTableOperationType--">TableProcedureInterface</a></code></span></div>
 <div class="block">Given an operation type we can take decisions about what to do with pending operations.
  e.g. if we get a delete and we have some table operation pending (e.g. add column)
@@ -749,7 +730,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareEnable</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.314">prepareEnable</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.305">prepareEnable</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Action before any real action of enabling table. Set the exception in the procedure instead
  of throwing it.  This approach is to deal with backward compatible with 1.0.</div>
@@ -769,7 +750,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>preEnable</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.353">preEnable</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.344">preEnable</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                        org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.EnableTableState&nbsp;state)
                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -790,7 +771,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>setTableStateToEnabling</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.364">setTableStateToEnabling</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>protected static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.355">setTableStateToEnabling</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                               <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                                        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">Mark table state to Enabling</div>
@@ -809,7 +790,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>setTableStateToEnabled</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.379">setTableStateToEnabled</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>protected static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.370">setTableStateToEnabled</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                              <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                                       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">Mark table state to Enabled</div>
@@ -827,7 +808,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>postEnable</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.396">postEnable</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.387">postEnable</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                         org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.EnableTableState&nbsp;state)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -848,7 +829,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>isTraceEnabled</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.406">isTraceEnabled</a>()</pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.397">isTraceEnabled</a>()</pre>
 <div class="block">The procedure could be restarted from a different machine. If the variable is null, we need to
  retrieve it.</div>
 <dl>
@@ -863,7 +844,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockListLast">
 <li class="blockList">
 <h4>runCoprocessorAction</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.420">runCoprocessorAction</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#line.411">runCoprocessorAction</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                   org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.EnableTableState&nbsp;state)
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html
index 031a0dc..d357c0f 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html
@@ -2194,16 +2194,14 @@
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#EnableTableProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-boolean-">EnableTableProcedure</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
-                    <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
-                    boolean&nbsp;skipTableStateCheck)</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#EnableTableProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-">EnableTableProcedure</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+                    <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Constructor</div>
 </td>
 </tr>
 <tr class="altColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#EnableTableProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-boolean-org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch-">EnableTableProcedure</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#EnableTableProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch-">EnableTableProcedure</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                     <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
-                    boolean&nbsp;skipTableStateCheck,
                     <a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a>&nbsp;syncLatch)</code>
 <div class="block">Constructor</div>
 </td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/ProcedurePrepareLatch.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/ProcedurePrepareLatch.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/ProcedurePrepareLatch.html
index c18c84e..468c364 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/ProcedurePrepareLatch.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/ProcedurePrepareLatch.html
@@ -285,9 +285,8 @@
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#EnableTableProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-boolean-org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch-">EnableTableProcedure</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#EnableTableProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch-">EnableTableProcedure</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                     <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
-                    boolean&nbsp;skipTableStateCheck,
                     <a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a>&nbsp;syncLatch)</code>
 <div class="block">Constructor</div>
 </td>

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/org/apache/hadoop/hbase/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/package-use.html b/devapidocs/org/apache/hadoop/hbase/package-use.html
index e9c04ef..b407df1 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-use.html
@@ -2168,12 +2168,6 @@ service.</div>
 <div class="block">Immutable POJO class for representing a table name.</div>
 </td>
 </tr>
-<tr class="rowColor">
-<td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/YouAreDeadException.html#org.apache.hadoop.hbase.master.assignment">YouAreDeadException</a>
-<div class="block">This exception is thrown by the master when a region server reports and is
- already being processed as dead.</div>
-</td>
-</tr>
 </tbody>
 </table>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html
index d4ecb17..cc0fe54 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html
@@ -132,7 +132,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.2000">ProcedureExecutor.KeepAliveWorkerThread</a>
+<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.2005">ProcedureExecutor.KeepAliveWorkerThread</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.WorkerThread</a></pre>
 </li>
 </ul>
@@ -252,7 +252,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockListLast">
 <li class="blockList">
 <h4>KeepAliveWorkerThread</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html#line.2002">KeepAliveWorkerThread</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html?is-external=true" title="class or interface in java.lang">ThreadGroup</a>&nbsp;group)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html#line.2007">KeepAliveWorkerThread</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html?is-external=true" title="class or interface in java.lang">ThreadGroup</a>&nbsp;group)</pre>
 </li>
 </ul>
 </li>
@@ -269,7 +269,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockListLast">
 <li class="blockList">
 <h4>keepAlive</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html#line.2007">keepAlive</a>(long&nbsp;lastUpdate)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html#line.2012">keepAlive</a>(long&nbsp;lastUpdate)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#keepAlive-long-">keepAlive</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.WorkerThread</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
index 6ad1509..0c6ad39 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.2020">ProcedureExecutor.WorkerMonitor</a>
+<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.2025">ProcedureExecutor.WorkerMonitor</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.html" title="class in org.apache.hadoop.hbase.procedure2">InlineChore</a></pre>
 </li>
 </ul>
@@ -277,7 +277,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockList">
 <li class="blockList">
 <h4>WORKER_MONITOR_INTERVAL_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2021">WORKER_MONITOR_INTERVAL_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2026">WORKER_MONITOR_INTERVAL_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.WorkerMonitor.WORKER_MONITOR_INTERVAL_CONF_KEY">Constant Field Values</a></dd>
@@ -290,7 +290,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_WORKER_MONITOR_INTERVAL</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2023">DEFAULT_WORKER_MONITOR_INTERVAL</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2028">DEFAULT_WORKER_MONITOR_INTERVAL</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.WorkerMonitor.DEFAULT_WORKER_MONITOR_INTERVAL">Constant Field Values</a></dd>
@@ -303,7 +303,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockList">
 <li class="blockList">
 <h4>WORKER_STUCK_THRESHOLD_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2025">WORKER_STUCK_THRESHOLD_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2030">WORKER_STUCK_THRESHOLD_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.WorkerMonitor.WORKER_STUCK_THRESHOLD_CONF_KEY">Constant Field Values</a></dd>
@@ -316,7 +316,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_WORKER_STUCK_THRESHOLD</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2027">DEFAULT_WORKER_STUCK_THRESHOLD</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2032">DEFAULT_WORKER_STUCK_THRESHOLD</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.WorkerMonitor.DEFAULT_WORKER_STUCK_THRESHOLD">Constant Field Values</a></dd>
@@ -329,7 +329,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockList">
 <li class="blockList">
 <h4>WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2029">WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2034">WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.WorkerMonitor.WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY">Constant Field Values</a></dd>
@@ -342,7 +342,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_WORKER_ADD_STUCK_PERCENTAGE</h4>
-<pre>private static final&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2031">DEFAULT_WORKER_ADD_STUCK_PERCENTAGE</a></pre>
+<pre>private static final&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2036">DEFAULT_WORKER_ADD_STUCK_PERCENTAGE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.WorkerMonitor.DEFAULT_WORKER_ADD_STUCK_PERCENTAGE">Constant Field Values</a></dd>
@@ -355,7 +355,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockList">
 <li class="blockList">
 <h4>addWorkerStuckPercentage</h4>
-<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2033">addWorkerStuckPercentage</a></pre>
+<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2038">addWorkerStuckPercentage</a></pre>
 </li>
 </ul>
 <a name="timeoutInterval">
@@ -364,7 +364,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockList">
 <li class="blockList">
 <h4>timeoutInterval</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2034">timeoutInterval</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2039">timeoutInterval</a></pre>
 </li>
 </ul>
 <a name="stuckThreshold">
@@ -373,7 +373,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>stuckThreshold</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2035">stuckThreshold</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2040">stuckThreshold</a></pre>
 </li>
 </ul>
 </li>
@@ -390,7 +390,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WorkerMonitor</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2037">WorkerMonitor</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2042">WorkerMonitor</a>()</pre>
 </li>
 </ul>
 </li>
@@ -407,7 +407,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2042">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2047">run</a>()</pre>
 </li>
 </ul>
 <a name="checkForStuckWorkers--">
@@ -416,7 +416,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockList">
 <li class="blockList">
 <h4>checkForStuckWorkers</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2050">checkForStuckWorkers</a>()</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2055">checkForStuckWorkers</a>()</pre>
 </li>
 </ul>
 <a name="checkThreadCount-int-">
@@ -425,7 +425,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockList">
 <li class="blockList">
 <h4>checkThreadCount</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2066">checkThreadCount</a>(int&nbsp;stuckCount)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2071">checkThreadCount</a>(int&nbsp;stuckCount)</pre>
 </li>
 </ul>
 <a name="refreshConfig--">
@@ -434,7 +434,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshConfig</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2085">refreshConfig</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2090">refreshConfig</a>()</pre>
 </li>
 </ul>
 <a name="getTimeoutInterval--">
@@ -443,7 +443,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getTimeoutInterval</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2095">getTimeoutInterval</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2100">getTimeoutInterval</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.html#getTimeoutInterval--">getTimeoutInterval</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.html" title="class in org.apache.hadoop.hbase.procedure2">InlineChore</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
index 43f18ab..99b6401 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
@@ -131,7 +131,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1921">ProcedureExecutor.WorkerThread</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1926">ProcedureExecutor.WorkerThread</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThread.html" title="class in org.apache.hadoop.hbase.procedure2">StoppableThread</a></pre>
 </li>
 </ul>
@@ -282,7 +282,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
 <ul class="blockList">
 <li class="blockList">
 <h4>executionStartTime</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1922">executionStartTime</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1927">executionStartTime</a></pre>
 </li>
 </ul>
 <a name="activeProcedure">
@@ -291,7 +291,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
 <ul class="blockListLast">
 <li class="blockList">
 <h4>activeProcedure</h4>
-<pre>private volatile&nbsp;<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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1923">activeProcedure</a></pre>
+<pre>private volatile&nbsp;<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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1928">activeProcedure</a></pre>
 </li>
 </ul>
 </li>
@@ -308,7 +308,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
 <ul class="blockList">
 <li class="blockList">
 <h4>WorkerThread</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1925">WorkerThread</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html?is-external=true" title="class or interface in java.lang">ThreadGroup</a>&nbsp;group)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1930">WorkerThread</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html?is-external=true" title="class or interface in java.lang">ThreadGroup</a>&nbsp;group)</pre>
 </li>
 </ul>
 <a name="WorkerThread-java.lang.ThreadGroup-java.lang.String-">
@@ -317,7 +317,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WorkerThread</h4>
-<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1929">WorkerThread</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html?is-external=true" title="class or interface in java.lang">ThreadGroup</a>&nbsp;group,
+<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1934">WorkerThread</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html?is-external=true" title="class or interface in java.lang">ThreadGroup</a>&nbsp;group,
                        <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;prefix)</pre>
 </li>
 </ul>
@@ -335,7 +335,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
 <ul class="blockList">
 <li class="blockList">
 <h4>sendStopSignal</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1935">sendStopSignal</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1940">sendStopSignal</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThread.html#sendStopSignal--">sendStopSignal</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThread.html" title="class in org.apache.hadoop.hbase.procedure2">StoppableThread</a></code></dd>
@@ -348,7 +348,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1939">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1944">run</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true#run--" title="class or interface in java.lang">run</a></code>&nbsp;in interface&nbsp;<code><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></code></dd>
@@ -363,7 +363,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</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/procedure2/ProcedureExecutor.WorkerThread.html#line.1980">toString</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/procedure2/ProcedureExecutor.WorkerThread.html#line.1985">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a></code></dd>
@@ -376,7 +376,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentRunTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1988">getCurrentRunTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1993">getCurrentRunTime</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the time since the current procedure is running</dd>
@@ -389,7 +389,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
 <ul class="blockListLast">
 <li class="blockList">
 <h4>keepAlive</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1993">keepAlive</a>(long&nbsp;lastUpdate)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1998">keepAlive</a>(long&nbsp;lastUpdate)</pre>
 </li>
 </ul>
 </li>


[18/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
index 8ef8fea..57d590b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
@@ -47,130 +47,130 @@
 <span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.ServerName;<a name="line.39"></a>
 <span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.TableName;<a name="line.40"></a>
 <span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.YouAreDeadException;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.DoNotRetryRegionException;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.Result;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.exceptions.UnexpectedStateException;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.favored.FavoredNodesManager;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.favored.FavoredNodesPromoter;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.MetricsAssignmentManager;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.master.RegionState.State;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.master.ServerListener;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.master.TableStateManager;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.master.balancer.FavoredStochasticBalancer;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.procedure2.ProcedureInMemoryChore;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.procedure2.util.StringUtils;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.regionserver.SequenceId;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.util.VersionInfo;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.zookeeper.KeeperException;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.slf4j.Logger;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.slf4j.LoggerFactory;<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse;<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>/**<a name="line.91"></a>
-<span class="sourceLineNo">092</span> * The AssignmentManager is the coordinator for region assign/unassign operations.<a name="line.92"></a>
-<span class="sourceLineNo">093</span> * &lt;ul&gt;<a name="line.93"></a>
-<span class="sourceLineNo">094</span> * &lt;li&gt;In-memory states of regions and servers are stored in {@link RegionStates}.&lt;/li&gt;<a name="line.94"></a>
-<span class="sourceLineNo">095</span> * &lt;li&gt;hbase:meta state updates are handled by {@link RegionStateStore}.&lt;/li&gt;<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * &lt;/ul&gt;<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * Regions are created by CreateTable, Split, Merge.<a name="line.97"></a>
-<span class="sourceLineNo">098</span> * Regions are deleted by DeleteTable, Split, Merge.<a name="line.98"></a>
-<span class="sourceLineNo">099</span> * Assigns are triggered by CreateTable, EnableTable, Split, Merge, ServerCrash.<a name="line.99"></a>
-<span class="sourceLineNo">100</span> * Unassigns are triggered by DisableTable, Split, Merge<a name="line.100"></a>
-<span class="sourceLineNo">101</span> */<a name="line.101"></a>
-<span class="sourceLineNo">102</span>@InterfaceAudience.Private<a name="line.102"></a>
-<span class="sourceLineNo">103</span>public class AssignmentManager implements ServerListener {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  private static final Logger LOG = LoggerFactory.getLogger(AssignmentManager.class);<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>  // TODO: AMv2<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  //  - handle region migration from hbase1 to hbase2.<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  //  - handle sys table assignment first (e.g. acl, namespace)<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  //  - handle table priorities<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  //  - If ServerBusyException trying to update hbase:meta, we abort the Master<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  //   See updateRegionLocation in RegionStateStore.<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  //<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  // See also<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  // https://docs.google.com/document/d/1eVKa7FHdeoJ1-9o8yZcOTAQbv0u0bblBlCCzVSIn69g/edit#heading=h.ystjyrkbtoq5<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  // for other TODOs.<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  public static final String BOOTSTRAP_THREAD_POOL_SIZE_CONF_KEY =<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      "hbase.assignment.bootstrap.thread.pool.size";<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>  public static final String ASSIGN_DISPATCH_WAIT_MSEC_CONF_KEY =<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      "hbase.assignment.dispatch.wait.msec";<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  private static final int DEFAULT_ASSIGN_DISPATCH_WAIT_MSEC = 150;<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>  public static final String ASSIGN_DISPATCH_WAITQ_MAX_CONF_KEY =<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      "hbase.assignment.dispatch.wait.queue.max.size";<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  private static final int DEFAULT_ASSIGN_DISPATCH_WAITQ_MAX = 100;<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>  public static final String RIT_CHORE_INTERVAL_MSEC_CONF_KEY =<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      "hbase.assignment.rit.chore.interval.msec";<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  private static final int DEFAULT_RIT_CHORE_INTERVAL_MSEC = 60 * 1000;<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>  public static final String ASSIGN_MAX_ATTEMPTS =<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      "hbase.assignment.maximum.attempts";<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  private static final int DEFAULT_ASSIGN_MAX_ATTEMPTS = Integer.MAX_VALUE;<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span>  /** Region in Transition metrics threshold time */<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  public static final String METRICS_RIT_STUCK_WARNING_THRESHOLD =<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      "hbase.metrics.rit.stuck.warning.threshold";<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  private static final int DEFAULT_RIT_STUCK_WARNING_THRESHOLD = 60 * 1000;<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  private final ProcedureEvent&lt;?&gt; metaAssignEvent = new ProcedureEvent&lt;&gt;("meta assign");<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private final ProcedureEvent&lt;?&gt; metaLoadEvent = new ProcedureEvent&lt;&gt;("meta load");<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private final MetricsAssignmentManager metrics;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  private final RegionInTransitionChore ritChore;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  private final MasterServices master;<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private final AtomicBoolean running = new AtomicBoolean(false);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  private final RegionStates regionStates = new RegionStates();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  private final RegionStateStore regionStateStore;<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>  private final boolean shouldAssignRegionsWithFavoredNodes;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  private final int assignDispatchWaitQueueMaxSize;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  private final int assignDispatchWaitMillis;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  private final int assignMaxAttempts;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>  private final Object checkIfShouldMoveSystemRegionLock = new Object();<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span>  private Thread assignThread;<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>  public AssignmentManager(final MasterServices master) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    this(master, new RegionStateStore(master));<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>  public AssignmentManager(final MasterServices master, final RegionStateStore stateStore) {<a name="line.165"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.DoNotRetryRegionException;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.Result;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.exceptions.UnexpectedStateException;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.favored.FavoredNodesManager;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.favored.FavoredNodesPromoter;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.MetricsAssignmentManager;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.master.RegionState.State;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.master.ServerListener;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.master.TableStateManager;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.master.balancer.FavoredStochasticBalancer;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.procedure2.ProcedureInMemoryChore;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.procedure2.util.StringUtils;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.regionserver.SequenceId;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.VersionInfo;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.zookeeper.KeeperException;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.slf4j.Logger;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.slf4j.LoggerFactory;<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse;<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>/**<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * The AssignmentManager is the coordinator for region assign/unassign operations.<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * &lt;ul&gt;<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * &lt;li&gt;In-memory states of regions and servers are stored in {@link RegionStates}.&lt;/li&gt;<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * &lt;li&gt;hbase:meta state updates are handled by {@link RegionStateStore}.&lt;/li&gt;<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * &lt;/ul&gt;<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * Regions are created by CreateTable, Split, Merge.<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * Regions are deleted by DeleteTable, Split, Merge.<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * Assigns are triggered by CreateTable, EnableTable, Split, Merge, ServerCrash.<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * Unassigns are triggered by DisableTable, Split, Merge<a name="line.99"></a>
+<span class="sourceLineNo">100</span> */<a name="line.100"></a>
+<span class="sourceLineNo">101</span>@InterfaceAudience.Private<a name="line.101"></a>
+<span class="sourceLineNo">102</span>public class AssignmentManager implements ServerListener {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  private static final Logger LOG = LoggerFactory.getLogger(AssignmentManager.class);<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  // TODO: AMv2<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  //  - handle region migration from hbase1 to hbase2.<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  //  - handle sys table assignment first (e.g. acl, namespace)<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  //  - handle table priorities<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  //  - If ServerBusyException trying to update hbase:meta, we abort the Master<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  //   See updateRegionLocation in RegionStateStore.<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  //<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  // See also<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  // https://docs.google.com/document/d/1eVKa7FHdeoJ1-9o8yZcOTAQbv0u0bblBlCCzVSIn69g/edit#heading=h.ystjyrkbtoq5<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  // for other TODOs.<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  public static final String BOOTSTRAP_THREAD_POOL_SIZE_CONF_KEY =<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      "hbase.assignment.bootstrap.thread.pool.size";<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>  public static final String ASSIGN_DISPATCH_WAIT_MSEC_CONF_KEY =<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      "hbase.assignment.dispatch.wait.msec";<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  private static final int DEFAULT_ASSIGN_DISPATCH_WAIT_MSEC = 150;<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  public static final String ASSIGN_DISPATCH_WAITQ_MAX_CONF_KEY =<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      "hbase.assignment.dispatch.wait.queue.max.size";<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  private static final int DEFAULT_ASSIGN_DISPATCH_WAITQ_MAX = 100;<a name="line.125"></a>
+<span class="sourceLineNo">126</span><a name="line.126"></a>
+<span class="sourceLineNo">127</span>  public static final String RIT_CHORE_INTERVAL_MSEC_CONF_KEY =<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      "hbase.assignment.rit.chore.interval.msec";<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  private static final int DEFAULT_RIT_CHORE_INTERVAL_MSEC = 60 * 1000;<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public static final String ASSIGN_MAX_ATTEMPTS =<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      "hbase.assignment.maximum.attempts";<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  private static final int DEFAULT_ASSIGN_MAX_ATTEMPTS = Integer.MAX_VALUE;<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span>  /** Region in Transition metrics threshold time */<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  public static final String METRICS_RIT_STUCK_WARNING_THRESHOLD =<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      "hbase.metrics.rit.stuck.warning.threshold";<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  private static final int DEFAULT_RIT_STUCK_WARNING_THRESHOLD = 60 * 1000;<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>  private final ProcedureEvent&lt;?&gt; metaAssignEvent = new ProcedureEvent&lt;&gt;("meta assign");<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  private final ProcedureEvent&lt;?&gt; metaLoadEvent = new ProcedureEvent&lt;&gt;("meta load");<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>  private final MetricsAssignmentManager metrics;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  private final RegionInTransitionChore ritChore;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  private final MasterServices master;<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>  private final AtomicBoolean running = new AtomicBoolean(false);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  private final RegionStates regionStates = new RegionStates();<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private final RegionStateStore regionStateStore;<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>  private final boolean shouldAssignRegionsWithFavoredNodes;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  private final int assignDispatchWaitQueueMaxSize;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  private final int assignDispatchWaitMillis;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  private final int assignMaxAttempts;<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  private final Object checkIfShouldMoveSystemRegionLock = new Object();<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>  private Thread assignThread;<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>  public AssignmentManager(final MasterServices master) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    this(master, new RegionStateStore(master));<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  }<a name="line.162"></a>
+<span class="sourceLineNo">163</span><a name="line.163"></a>
+<span class="sourceLineNo">164</span>  @VisibleForTesting<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  AssignmentManager(final MasterServices master, final RegionStateStore stateStore) {<a name="line.165"></a>
 <span class="sourceLineNo">166</span>    this.master = master;<a name="line.166"></a>
 <span class="sourceLineNo">167</span>    this.regionStateStore = stateStore;<a name="line.167"></a>
 <span class="sourceLineNo">168</span>    this.metrics = new MetricsAssignmentManager();<a name="line.168"></a>
@@ -987,941 +987,895 @@
 <span class="sourceLineNo">979</span>  //  RS Status update (report online regions) helpers<a name="line.979"></a>
 <span class="sourceLineNo">980</span>  // ============================================================================================<a name="line.980"></a>
 <span class="sourceLineNo">981</span>  /**<a name="line.981"></a>
-<span class="sourceLineNo">982</span>   * the master will call this method when the RS send the regionServerReport().<a name="line.982"></a>
-<span class="sourceLineNo">983</span>   * the report will contains the "online regions".<a name="line.983"></a>
-<span class="sourceLineNo">984</span>   * this method will check the the online regions against the in-memory state of the AM,<a name="line.984"></a>
-<span class="sourceLineNo">985</span>   * if there is a mismatch we will try to fence out the RS with the assumption<a name="line.985"></a>
-<span class="sourceLineNo">986</span>   * that something went wrong on the RS side.<a name="line.986"></a>
-<span class="sourceLineNo">987</span>   */<a name="line.987"></a>
-<span class="sourceLineNo">988</span>  public void reportOnlineRegions(final ServerName serverName, final Set&lt;byte[]&gt; regionNames)<a name="line.988"></a>
-<span class="sourceLineNo">989</span>      throws YouAreDeadException {<a name="line.989"></a>
-<span class="sourceLineNo">990</span>    if (!isRunning()) return;<a name="line.990"></a>
-<span class="sourceLineNo">991</span>    if (LOG.isTraceEnabled()) {<a name="line.991"></a>
-<span class="sourceLineNo">992</span>      LOG.trace("ReportOnlineRegions " + serverName + " regionCount=" + regionNames.size() +<a name="line.992"></a>
-<span class="sourceLineNo">993</span>        ", metaLoaded=" + isMetaLoaded() + " " +<a name="line.993"></a>
-<span class="sourceLineNo">994</span>          regionNames.stream().map(element -&gt; Bytes.toStringBinary(element)).<a name="line.994"></a>
-<span class="sourceLineNo">995</span>            collect(Collectors.toList()));<a name="line.995"></a>
-<span class="sourceLineNo">996</span>    }<a name="line.996"></a>
-<span class="sourceLineNo">997</span><a name="line.997"></a>
-<span class="sourceLineNo">998</span>    final ServerStateNode serverNode = regionStates.getOrCreateServer(serverName);<a name="line.998"></a>
-<span class="sourceLineNo">999</span><a name="line.999"></a>
-<span class="sourceLineNo">1000</span>    synchronized (serverNode) {<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>      if (!serverNode.isInState(ServerState.ONLINE)) {<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>        LOG.warn("Got a report from a server result in state " + serverNode.getState());<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>        return;<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>      }<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>    }<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span><a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>    if (regionNames.isEmpty()) {<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>      // nothing to do if we don't have regions<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>      LOG.trace("no online region found on " + serverName);<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>    } else if (!isMetaLoaded()) {<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>      // if we are still on startup, discard the report unless is from someone holding meta<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      checkOnlineRegionsReportForMeta(serverNode, regionNames);<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>    } else {<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      // The Heartbeat updates us of what regions are only. check and verify the state.<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>      checkOnlineRegionsReport(serverNode, regionNames);<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>    }<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span><a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>    // wake report event<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>    wakeServerReportEvent(serverNode);<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>  void checkOnlineRegionsReportForMeta(ServerStateNode serverNode, Set&lt;byte[]&gt; regionNames) {<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>    try {<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>      for (byte[] regionName : regionNames) {<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>        final RegionInfo hri = getMetaRegionFromName(regionName);<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>        if (hri == null) {<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>          if (LOG.isTraceEnabled()) {<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>            LOG.trace("Skip online report for region=" + Bytes.toStringBinary(regionName) +<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>              " while meta is loading");<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>          }<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>          continue;<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>        }<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span><a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>        RegionStateNode regionNode = regionStates.getOrCreateRegionStateNode(hri);<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>        LOG.info("META REPORTED: " + regionNode);<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>        regionNode.lock();<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>        try {<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>          if (!reportTransition(regionNode, serverNode, TransitionCode.OPENED, 0)) {<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>            LOG.warn("META REPORTED but no procedure found (complete?); set location=" +<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>              serverNode.getServerName());<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>            regionNode.setRegionLocation(serverNode.getServerName());<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>          } else if (LOG.isTraceEnabled()) {<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>            LOG.trace("META REPORTED: " + regionNode);<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>          }<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>        } finally {<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>          regionNode.unlock();<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>        }<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>      }<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    } catch (IOException e) {<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>      ServerName serverName = serverNode.getServerName();<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>      LOG.warn("KILLING " + serverName + ": " + e.getMessage());<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>      killRegionServer(serverNode);<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    }<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>  }<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span><a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>  void checkOnlineRegionsReport(final ServerStateNode serverNode, final Set&lt;byte[]&gt; regionNames) {<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    final ServerName serverName = serverNode.getServerName();<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    try {<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      for (byte[] regionName: regionNames) {<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>        if (!isRunning()) {<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>          return;<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>        }<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>        final RegionStateNode regionNode = regionStates.getRegionStateNodeFromName(regionName);<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>        if (regionNode == null) {<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>          throw new UnexpectedStateException("Not online: " + Bytes.toStringBinary(regionName));<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>        }<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>        regionNode.lock();<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>        try {<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>          if (regionNode.isInState(State.OPENING, State.OPEN)) {<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>            if (!regionNode.getRegionLocation().equals(serverName)) {<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>              throw new UnexpectedStateException(regionNode.toString() +<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>                " reported OPEN on server=" + serverName +<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>                " but state has otherwise.");<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>            } else if (regionNode.isInState(State.OPENING)) {<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>              try {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>                if (!reportTransition(regionNode, serverNode, TransitionCode.OPENED, 0)) {<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>                  LOG.warn(regionNode.toString() + " reported OPEN on server=" + serverName +<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>                    " but state has otherwise AND NO procedure is running");<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>                }<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>              } catch (UnexpectedStateException e) {<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>                LOG.warn(regionNode.toString() + " reported unexpteced OPEN: " + e.getMessage(), e);<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>              }<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>            }<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>          } else if (!regionNode.isInState(State.CLOSING, State.SPLITTING)) {<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>            long diff = regionNode.getLastUpdate() - EnvironmentEdgeManager.currentTime();<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>            if (diff &gt; 1000/*One Second... make configurable if an issue*/) {<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>              // So, we can get report that a region is CLOSED or SPLIT because a heartbeat<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>              // came in at about same time as a region transition. Make sure there is some<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>              // elapsed time between killing remote server.<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>              throw new UnexpectedStateException(regionNode.toString() +<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>                " reported an unexpected OPEN; time since last update=" + diff);<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>            }<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>          }<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>        } finally {<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>          regionNode.unlock();<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>    } catch (IOException e) {<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>      //See HBASE-21421, we can count on reportRegionStateTransition calls<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      //We only log a warming here. It could be a network lag.<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>      LOG.warn("Failed to checkOnlineRegionsReport, maybe due to network lag, "<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>          + "if this message continues, be careful of double assign", e);<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    }<a name="line.1103"></a>
+<span class="sourceLineNo">982</span>   * The master will call this method when the RS send the regionServerReport(). The report will<a name="line.982"></a>
+<span class="sourceLineNo">983</span>   * contains the "online regions". This method will check the the online regions against the<a name="line.983"></a>
+<span class="sourceLineNo">984</span>   * in-memory state of the AM, and we will log a warn message if there is a mismatch. This is<a name="line.984"></a>
+<span class="sourceLineNo">985</span>   * because that there is no fencing between the reportRegionStateTransition method and<a name="line.985"></a>
+<span class="sourceLineNo">986</span>   * regionServerReport method, so there could be race and introduce inconsistency here, but<a name="line.986"></a>
+<span class="sourceLineNo">987</span>   * actually there is no problem.<a name="line.987"></a>
+<span class="sourceLineNo">988</span>   * &lt;p/&gt;<a name="line.988"></a>
+<span class="sourceLineNo">989</span>   * Please see HBASE-21421 and HBASE-21463 for more details.<a name="line.989"></a>
+<span class="sourceLineNo">990</span>   */<a name="line.990"></a>
+<span class="sourceLineNo">991</span>  public void reportOnlineRegions(ServerName serverName, Set&lt;byte[]&gt; regionNames) {<a name="line.991"></a>
+<span class="sourceLineNo">992</span>    if (!isRunning()) {<a name="line.992"></a>
+<span class="sourceLineNo">993</span>      return;<a name="line.993"></a>
+<span class="sourceLineNo">994</span>    }<a name="line.994"></a>
+<span class="sourceLineNo">995</span>    if (LOG.isTraceEnabled()) {<a name="line.995"></a>
+<span class="sourceLineNo">996</span>      LOG.trace("ReportOnlineRegions {} regionCount={}, metaLoaded={} {}", serverName,<a name="line.996"></a>
+<span class="sourceLineNo">997</span>        regionNames.size(), isMetaLoaded(),<a name="line.997"></a>
+<span class="sourceLineNo">998</span>        regionNames.stream().map(Bytes::toStringBinary).collect(Collectors.toList()));<a name="line.998"></a>
+<span class="sourceLineNo">999</span>    }<a name="line.999"></a>
+<span class="sourceLineNo">1000</span><a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>    ServerStateNode serverNode = regionStates.getOrCreateServer(serverName);<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span><a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>    synchronized (serverNode) {<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>      if (!serverNode.isInState(ServerState.ONLINE)) {<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>        LOG.warn("Got a report from a server result in state " + serverNode.getState());<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>        return;<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>      }<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>    }<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>    if (regionNames.isEmpty()) {<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>      // nothing to do if we don't have regions<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>      LOG.trace("no online region found on {}", serverName);<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>      return;<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>    }<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>    if (!isMetaLoaded()) {<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>      // we are still on startup, skip checking<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>      return;<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>    }<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>    // The Heartbeat tells us of what regions are on the region serve, check the state.<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>    checkOnlineRegionsReport(serverNode, regionNames);<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span><a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>    // wake report event<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>    wakeServerReportEvent(serverNode);<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>  }<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span><a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>  // just check and output possible inconsistency, without actually doing anything<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>  private void checkOnlineRegionsReport(ServerStateNode serverNode, Set&lt;byte[]&gt; regionNames) {<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>    ServerName serverName = serverNode.getServerName();<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>    for (byte[] regionName : regionNames) {<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>      if (!isRunning()) {<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>        return;<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>      }<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      RegionStateNode regionNode = regionStates.getRegionStateNodeFromName(regionName);<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>      if (regionNode == null) {<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>        LOG.warn("No region state node for {}, it should already be on {}",<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>          Bytes.toStringBinary(regionName), serverName);<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>        continue;<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>      }<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>      regionNode.lock();<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>      try {<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>        long diff = EnvironmentEdgeManager.currentTime() - regionNode.getLastUpdate();<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>        if (regionNode.isInState(State.OPENING, State.OPEN)) {<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>          // This is possible as a region server has just closed a region but the region server<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>          // report is generated before the closing, but arrive after the closing. Make sure there<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>          // is some elapsed time so less false alarms.<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>          if (!regionNode.getRegionLocation().equals(serverName) &amp;&amp; diff &gt; 1000) {<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>            LOG.warn("{} reported OPEN on server={} but state has otherwise", regionNode,<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>              serverName);<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>          }<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>        } else if (!regionNode.isInState(State.CLOSING, State.SPLITTING)) {<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>          // So, we can get report that a region is CLOSED or SPLIT because a heartbeat<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>          // came in at about same time as a region transition. Make sure there is some<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>          // elapsed time so less false alarms.<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>          if (diff &gt; 1000) {<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>            LOG.warn("{} reported an unexpected OPEN on {}; time since last update={}ms",<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>              regionNode, serverName, diff);<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>          }<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>        }<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>      } finally {<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>        regionNode.unlock();<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>      }<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    }<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>  }<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span><a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>  protected boolean waitServerReportEvent(ServerName serverName, Procedure&lt;?&gt; proc) {<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>    final ServerStateNode serverNode = regionStates.getOrCreateServer(serverName);<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    if (serverNode == null) {<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>      LOG.warn("serverName=null; {}", proc);<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>    }<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>    return serverNode.getReportEvent().suspendIfNotReady(proc);<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>  }<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span><a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>  protected void wakeServerReportEvent(final ServerStateNode serverNode) {<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>    serverNode.getReportEvent().wake(getProcedureScheduler());<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>  }<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span><a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>  // ============================================================================================<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>  //  RIT chore<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>  // ============================================================================================<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>  private static class RegionInTransitionChore extends ProcedureInMemoryChore&lt;MasterProcedureEnv&gt; {<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>    public RegionInTransitionChore(final int timeoutMsec) {<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      super(timeoutMsec);<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>    }<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span><a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>    @Override<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    protected void periodicExecute(final MasterProcedureEnv env) {<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>      final AssignmentManager am = env.getAssignmentManager();<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span><a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      final RegionInTransitionStat ritStat = am.computeRegionInTransitionStat();<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>      if (ritStat.hasRegionsOverThreshold()) {<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>        for (RegionState hri: ritStat.getRegionOverThreshold()) {<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>          am.handleRegionOverStuckWarningThreshold(hri.getRegion());<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>        }<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>      }<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span><a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>      // update metrics<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>      am.updateRegionsInTransitionMetrics(ritStat);<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>    }<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>  public RegionInTransitionStat computeRegionInTransitionStat() {<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>    final RegionInTransitionStat rit = new RegionInTransitionStat(getConfiguration());<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>    rit.update(this);<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>    return rit;<a name="line.1103"></a>
 <span class="sourceLineNo">1104</span>  }<a name="line.1104"></a>
 <span class="sourceLineNo">1105</span><a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>  protected boolean waitServerReportEvent(ServerName serverName, Procedure&lt;?&gt; proc) {<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    final ServerStateNode serverNode = regionStates.getOrCreateServer(serverName);<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    if (serverNode == null) {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      LOG.warn("serverName=null; {}", proc);<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    }<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>    return serverNode.getReportEvent().suspendIfNotReady(proc);<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>  }<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span><a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>  protected void wakeServerReportEvent(final ServerStateNode serverNode) {<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>    serverNode.getReportEvent().wake(getProcedureScheduler());<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>  }<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span><a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>  // ============================================================================================<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>  //  RIT chore<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>  // ============================================================================================<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>  private static class RegionInTransitionChore extends ProcedureInMemoryChore&lt;MasterProcedureEnv&gt; {<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>    public RegionInTransitionChore(final int timeoutMsec) {<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>      super(timeoutMsec);<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>    }<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span><a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>    @Override<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    protected void periodicExecute(final MasterProcedureEnv env) {<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>      final AssignmentManager am = env.getAssignmentManager();<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span><a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>      final RegionInTransitionStat ritStat = am.computeRegionInTransitionStat();<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>      if (ritStat.hasRegionsOverThreshold()) {<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>        for (RegionState hri: ritStat.getRegionOverThreshold()) {<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>          am.handleRegionOverStuckWarningThreshold(hri.getRegion());<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>        }<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>      }<a name="line.1135"></a>
+<span class="sourceLineNo">1106</span>  public static class RegionInTransitionStat {<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>    private final int ritThreshold;<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span><a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>    private HashMap&lt;String, RegionState&gt; ritsOverThreshold = null;<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>    private long statTimestamp;<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>    private long oldestRITTime = 0;<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>    private int totalRITsTwiceThreshold = 0;<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>    private int totalRITs = 0;<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span><a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>    @VisibleForTesting<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>    public RegionInTransitionStat(final Configuration conf) {<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>      this.ritThreshold =<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>        conf.getInt(METRICS_RIT_STUCK_WARNING_THRESHOLD, DEFAULT_RIT_STUCK_WARNING_THRESHOLD);<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>    }<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span><a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>    public int getRITThreshold() {<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>      return ritThreshold;<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>    }<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span><a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>    public long getTimestamp() {<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>      return statTimestamp;<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>    }<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span><a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>    public int getTotalRITs() {<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>      return totalRITs;<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>    public long getOldestRITTime() {<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>      return oldestRITTime;<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>    }<a name="line.1135"></a>
 <span class="sourceLineNo">1136</span><a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>      // update metrics<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>      am.updateRegionsInTransitionMetrics(ritStat);<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>    }<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>  }<a name="line.1140"></a>
+<span class="sourceLineNo">1137</span>    public int getTotalRITsOverThreshold() {<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>      return m != null ? m.size() : 0;<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>    }<a name="line.1140"></a>
 <span class="sourceLineNo">1141</span><a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>  public RegionInTransitionStat computeRegionInTransitionStat() {<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    final RegionInTransitionStat rit = new RegionInTransitionStat(getConfiguration());<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>    rit.update(this);<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>    return rit;<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>  public static class RegionInTransitionStat {<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    private final int ritThreshold;<a name="line.1149"></a>
+<span class="sourceLineNo">1142</span>    public boolean hasRegionsTwiceOverThreshold() {<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>      return totalRITsTwiceThreshold &gt; 0;<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>    public boolean hasRegionsOverThreshold() {<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>      return m != null &amp;&amp; !m.isEmpty();<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>    }<a name="line.1149"></a>
 <span class="sourceLineNo">1150</span><a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    private HashMap&lt;String, RegionState&gt; ritsOverThreshold = null;<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>    private long statTimestamp;<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>    private long oldestRITTime = 0;<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>    private int totalRITsTwiceThreshold = 0;<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>    private int totalRITs = 0;<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span><a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    @VisibleForTesting<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>    public RegionInTransitionStat(final Configuration conf) {<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>      this.ritThreshold =<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>        conf.getInt(METRICS_RIT_STUCK_WARNING_THRESHOLD, DEFAULT_RIT_STUCK_WARNING_THRESHOLD);<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    }<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span><a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>    public int getRITThreshold() {<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      return ritThreshold;<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    }<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span><a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>    public long getTimestamp() {<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>      return statTimestamp;<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    }<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span><a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    public int getTotalRITs() {<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>      return totalRITs;<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    }<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span><a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    public long getOldestRITTime() {<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>      return oldestRITTime;<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    }<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span><a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    public int getTotalRITsOverThreshold() {<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>      return m != null ? m.size() : 0;<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>    }<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span><a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>    public boolean hasRegionsTwiceOverThreshold() {<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>      return totalRITsTwiceThreshold &gt; 0;<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    }<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span><a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>    public boolean hasRegionsOverThreshold() {<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>      return m != null &amp;&amp; !m.isEmpty();<a name="line.1190"></a>
+<span class="sourceLineNo">1151</span>    public Collection&lt;RegionState&gt; getRegionOverThreshold() {<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>      return m != null? m.values(): Collections.emptySet();<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>    }<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span><a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>    public boolean isRegionOverThreshold(final RegionInfo regionInfo) {<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>      return m != null &amp;&amp; m.containsKey(regionInfo.getEncodedName());<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>    }<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span><a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>    public boolean isRegionTwiceOverThreshold(final RegionInfo regionInfo) {<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>      if (m == null) return false;<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>      final RegionState state = m.get(regionInfo.getEncodedName());<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>      if (state == null) return false;<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>      return (statTimestamp - state.getStamp()) &gt; (ritThreshold * 2);<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>    }<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span><a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>    protected void update(final AssignmentManager am) {<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>      final RegionStates regionStates = am.getRegionStates();<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>      this.statTimestamp = EnvironmentEdgeManager.currentTime();<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>      update(regionStates.getRegionsStateInTransition(), statTimestamp);<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>      update(regionStates.getRegionFailedOpen(), statTimestamp);<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>    }<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span><a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>    private void update(final Collection&lt;RegionState&gt; regions, final long currentTime) {<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>      for (RegionState state: regions) {<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>        totalRITs++;<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>        final long ritTime = currentTime - state.getStamp();<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>        if (ritTime &gt; ritThreshold) {<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>          if (ritsOverThreshold == null) {<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>            ritsOverThreshold = new HashMap&lt;String, RegionState&gt;();<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>          }<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>          ritsOverThreshold.put(state.getRegion().getEncodedName(), state);<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>          totalRITsTwiceThreshold += (ritTime &gt; (ritThreshold * 2)) ? 1 : 0;<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>        }<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>        if (oldestRITTime &lt; ritTime) {<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>          oldestRITTime = ritTime;<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>        }<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>      }<a name="line.1190"></a>
 <span class="sourceLineNo">1191</span>    }<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span><a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>    public Collection&lt;RegionState&gt; getRegionOverThreshold() {<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      return m != null? m.values(): Collections.emptySet();<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>    }<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span><a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>    public boolean isRegionOverThreshold(final RegionInfo regionInfo) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>      return m != null &amp;&amp; m.containsKey(regionInfo.getEncodedName());<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>    }<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span><a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>    public boolean isRegionTwiceOverThreshold(final RegionInfo regionInfo) {<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>      Map&lt;String, RegionState&gt; m = this.ritsOverThreshold;<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>      if (m == null) return false;<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>      final RegionState state = m.get(regionInfo.getEncodedName());<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>      if (state == null) return false;<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>      return (statTimestamp - state.getStamp()) &gt; (ritThreshold * 2);<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>    }<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span><a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>    protected void update(final AssignmentManager am) {<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>      final RegionStates regionStates = am.getRegionStates();<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>      this.statTimestamp = EnvironmentEdgeManager.currentTime();<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>      update(regionStates.getRegionsStateInTransition(), statTimestamp);<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>      update(regionStates.getRegionFailedOpen(), statTimestamp);<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>    }<a name="line.1216"></a>
+<span class="sourceLineNo">1192</span>  }<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span><a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>  private void updateRegionsInTransitionMetrics(final RegionInTransitionStat ritStat) {<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>    metrics.updateRITOldestAge(ritStat.getOldestRITTime());<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>    metrics.updateRITCount(ritStat.getTotalRITs());<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    metrics.updateRITCountOverThreshold(ritStat.getTotalRITsOverThreshold());<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>  }<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span><a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>  private void handleRegionOverStuckWarningThreshold(final RegionInfo regionInfo) {<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>    final RegionStateNode regionNode = regionStates.getRegionStateNode(regionInfo);<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    //if (regionNode.isStuck()) {<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>    LOG.warn("STUCK Region-In-Transition {}", regionNode);<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>  }<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span><a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>  // ============================================================================================<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>  //  TODO: Master load/bootstrap<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>  // ============================================================================================<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>  public void joinCluster() throws IOException {<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>    long startTime = System.nanoTime();<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>    LOG.debug("Joining cluster...");<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span><a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>    // Scan hbase:meta to build list of existing regions, servers, and assignment.<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>    // hbase:meta is online now or will be. Inside loadMeta, we keep trying. Can't make progress<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>    // w/o  meta.<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>    loadMeta();<a name="line.1216"></a>
 <span class="sourceLineNo">1217</span><a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>    private void update(final Collection&lt;RegionState&gt; regions, final long currentTime) {<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>      for (RegionState state: regions) {<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>        totalRITs++;<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>        final long ritTime = currentTime - state.getStamp();<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>        if (ritTime &gt; ritThreshold) {<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>          if (ritsOverThreshold == null) {<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>            ritsOverThreshold = new HashMap&lt;String, RegionState&gt;();<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>          }<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>          ritsOverThreshold.put(state.getRegion().getEncodedName(), state);<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>          totalRITsTwiceThreshold += (ritTime &gt; (ritThreshold * 2)) ? 1 : 0;<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>        }<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>        if (oldestRITTime &lt; ritTime) {<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>          oldestRITTime = ritTime;<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>        }<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>      }<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>    }<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>  }<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span><a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>  private void updateRegionsInTransitionMetrics(final RegionInTransitionStat ritStat) {<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>    metrics.updateRITOldestAge(ritStat.getOldestRITTime());<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>    metrics.updateRITCount(ritStat.getTotalRITs());<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>    metrics.updateRITCountOverThreshold(ritStat.getTotalRITsOverThreshold());<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>  }<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span><a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>  private void handleRegionOverStuckWarningThreshold(final RegionInfo regionInfo) {<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>    final RegionStateNode regionNode = regionStates.getRegionStateNode(regionInfo);<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>    //if (regionNode.isStuck()) {<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>    LOG.warn("STUCK Region-In-Transition {}", regionNode);<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>  }<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span><a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>  // ============================================================================================<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>  //  TODO: Master load/bootstrap<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>  // ============================================================================================<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>  public void joinCluster() throws IOException {<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    long startTime = System.nanoTime();<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>    LOG.debug("Joining cluster...");<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span><a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>    // Scan hbase:meta to build list of existing regions, servers, and assignment.<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>    // hbase:meta is online now or will be. Inside loadMeta, we keep trying. Can't make progress<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>    // w/o  meta.<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>    loadMeta();<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span><a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>    while (master.getServerManager().countOfRegionServers() &lt; 1) {<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>      LOG.info("Waiting for RegionServers to join; current count={}",<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>        master.getServerManager().countOfRegionServers());<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      Threads.sleep(250);<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>    }<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>    LOG.info("Number of RegionServers={}", master.getServerManager().countOfRegionServers());<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span><a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>    // Start the RIT chore<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>    master.getMasterProcedureExecutor().addChore(this.ritChore);<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span><a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>    long costMs = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startTime);<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>    LOG.info("Joined the cluster in {}", StringUtils.humanTimeDiff(costMs));<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>  }<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span><a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>  /**<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>   * Create assign procedure for offline regions.<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>   * Just follow the old processofflineServersWithOnlineRegions method. Since now we do not need to<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>   * deal with dead server any more, we only deal with the regions in OFFLINE state in this method.<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>   * And this is a bit strange, that for new regions, we will add it in CLOSED state instead of<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>   * OFFLINE state, and usually there will be a procedure to track them. The<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>   * processofflineServersWithOnlineRegions is a legacy from long ago, as things are going really<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>   * different now, maybe we do not need this method any more. Need to revisit later.<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>   */<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>  // Public so can be run by the Master as part of the startup. Needs hbase:meta to be online.<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>  // Needs to be done after the table state manager has been started.<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>  public void processOfflineRegions() {<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>    List&lt;RegionInfo&gt; offlineRegions = regionStates.getRegionStates().stream()<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>      .filter(RegionState::isOffline).filter(s -&gt; isTableEnabled(s.getRegion().getTable()))<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>      .map(RegionState::getRegion).collect(Collectors.toList());<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>    if (!offlineRegions.isEmpty()) {<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>      master.getMasterProcedureExecutor().submitProcedures(<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>        master.getAssignmentManager().createRoundRobinAssignProcedures(offlineRegions));<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>    }<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>  }<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span><a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>  private void loadMeta() throws IOException {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>    // TODO: use a thread pool<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>    regionStateStore.visitMeta(new RegionStateStore.RegionStateVisitor() {<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>      @Override<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>      public void visitRegionState(Result result, final RegionInfo regionInfo, final State state,<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>          final ServerName regionLocation, final ServerName lastHost, final long openSeqNum) {<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>        if (state == null &amp;&amp; regionLocation == null &amp;&amp; lastHost == null &amp;&amp;<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>            openSeqNum == SequenceId.NO_SEQUENCE_ID) {<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>          // This is a row with nothing in it.<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>          LOG.warn("Skipping empty row={}", result);<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>          return;<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>        }<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>        State localState = state;<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>        if (localState == null) {<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>          // No region state column data in hbase:meta table! Are I doing a rolling upgrade from<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>          // hbase1 to hbase2? Am I restoring a SNAPSHOT or otherwise adding a region to hbase:meta?<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>          // In any of these cases, state is empty. For now, presume OFFLINE but there are probably<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>          // cases where we need to probe more to be sure this correct; TODO informed by experience.<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>          LOG.info(regionInfo.getEncodedName() + " regionState=null; presuming " + State.OFFLINE);<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span><a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>          localState = State.OFFLINE;<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>        }<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>        RegionStateNode regionNode = regionStates.getOrCreateRegionStateNode(regionInfo);<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>        // Do not need to lock on regionNode, as we can make sure that before we finish loading<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>        // meta, all the related procedures can not be executed. The only exception is formeta<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>        // region related operations, but here we do not load the informations for meta region.<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>        regionNode.setState(localState);<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>        regionNode.setLastHost(lastHost);<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>        regionNode.setRegionLocation(regionLocation);<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>        regionNode.setOpenSeqNum(openSeqNum);<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span><a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>        if (localState == State.OPEN) {<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>          assert regionLocation != null : "found null region location for " + regionNode;<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>          regionStates.addRegionToServer(regionNode);<a name="line.1328"></a>
-<span class="sourceLineNo">1329

<TRUNCATED>

[07/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/downloads.html
----------------------------------------------------------------------
diff --git a/downloads.html b/downloads.html
index f4ccb1f..242f8eb 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index 129ca99..c7f8284 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index 2a9eec7..a83cd56 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index aa62a6b..0b66450 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index b49570f..6e4b2ff 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index fd76755..c0d2180 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index b365859..e62356e 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index c4afae0..1801bed 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index a7e6113..eaa0afe 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index 5442c2a..20d1f60 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 71a28f5..707f04f 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index 937bb49..5f33a59 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index e08d24b..4c73314 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index 19976a1..31b7403 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index 5b7e111..981cd7c 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index fcee436..f0ba8a6 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index e40a532..9dca7b7 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index 52ba6f6..dafd106 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index fbe6e20..d19029d 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index e044cc5..8e0fcad 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index c81df00..f5ee24a 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index 3a921e4..acc2099 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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" />
@@ -690,66 +690,72 @@
 <td><a class="externalLink" href="mailto:yuzhihong@gmail.com">yuzhihong@gmail.com</a></td>
 <td>-8</td></tr>
 <tr class="b">
+<td><img src="http://www.gravatar.com/avatar/8587ee9a6721d886567fb06e20ddbafd?d=mm&amp;s=60" alt="" /></td>
+<td><a name="tianjy"></a>tianjy</td>
+<td>-</td>
+<td><a class="externalLink" href="mailto:tianjy@apache.org">tianjy@apache.org</a></td>
+<td>+8</td></tr>
+<tr class="a">
 <td><img src="http://www.gravatar.com/avatar/4d175cf9f78c36378972941bb01e8c75?d=mm&amp;s=60" alt="" /></td>
 <td><a name="todd"></a>todd</td>
 <td>Todd Lipcon</td>
 <td><a class="externalLink" href="mailto:todd@apache.org">todd@apache.org</a></td>
 <td>-8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="http://www.gravatar.com/avatar/c73b058d47f2db1621b6f55a2f22f040?d=mm&amp;s=60" alt="" /></td>
 <td><a name="toffer"></a>toffer</td>
 <td>Francis Liu</td>
 <td><a class="externalLink" href="mailto:toffer@apache.org">toffer@apache.org</a></td>
 <td>-8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="http://www.gravatar.com/avatar/b370e829fb32221574ad5edd21393bed?d=mm&amp;s=60" alt="" /></td>
 <td><a name="vikasv"></a>vikasv</td>
 <td>Vikas Vishwakarma</td>
 <td><a class="externalLink" href="mailto:vikasv@apache.org">vikasv@apache.org</a></td>
 <td>+5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="http://www.gravatar.com/avatar/3973f9c377db612c7f22afdfa0fef383?d=mm&amp;s=60" alt="" /></td>
 <td><a name="virag"></a>virag</td>
 <td>Virag Kothari</td>
 <td><a class="externalLink" href="mailto:virag@yahoo-inc.com">virag@yahoo-inc.com</a></td>
 <td>-8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="http://www.gravatar.com/avatar/8c7c9edef71d2f5b6f0a673a6ded3bc2?d=mm&amp;s=60" alt="" /></td>
 <td><a name="yangzhe1991"></a>yangzhe1991</td>
 <td>Phil Yang</td>
 <td><a class="externalLink" href="mailto:yangzhe1991@apache.org">yangzhe1991@apache.org</a></td>
 <td>+8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="http://www.gravatar.com/avatar/fe45f6e161ee945f8d8d8da140ac3100?d=mm&amp;s=60" alt="" /></td>
 <td><a name="zghao"></a>zghao</td>
 <td>Guanghao Zhang</td>
 <td><a class="externalLink" href="mailto:zghao@apache.org">zghao@apache.org</a></td>
 <td>+8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="http://www.gravatar.com/avatar/de2edb8ef5f82e4a40662d4ff5658ab3?d=mm&amp;s=60" alt="" /></td>
 <td><a name="zhangduo"></a>zhangduo</td>
 <td>Duo Zhang</td>
 <td><a class="externalLink" href="mailto:zhangduo@apache.org">zhangduo@apache.org</a></td>
 <td>+8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="http://www.gravatar.com/avatar/446df0e403724a7f8b7bd6998ff46b7a?d=mm&amp;s=60" alt="" /></td>
 <td><a name="zjushch"></a>zjushch</td>
 <td>Chunhui Shen</td>
 <td><a class="externalLink" href="mailto:zjushch@apache.org">zjushch@apache.org</a></td>
 <td>+8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="http://www.gravatar.com/avatar/bb2eb1414c96df6676df941f006a9917?d=mm&amp;s=60" alt="" /></td>
 <td><a name="churro"></a>churro</td>
 <td>Rahul Gidwani</td>
 <td><a class="externalLink" href="mailto:churro@apache.org">churro@apache.org</a></td>
 <td>-8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="http://www.gravatar.com/avatar/6d5e811854c8c2f81bd906cb93666e4e?d=mm&amp;s=60" alt="" /></td>
 <td><a name="yiliang"></a>yiliang</td>
 <td>Yi Liang</td>
 <td><a class="externalLink" href="mailto:yiliang@apache.org">yiliang@apache.org</a></td>
 <td>-8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="http://www.gravatar.com/avatar/5f192ad7cce9920785ca7a12ef790166?d=mm&amp;s=60" alt="" /></td>
 <td><a name="zyork"></a>zyork</td>
 <td>Zach York</td>
@@ -770,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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/testdevapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-frame.html b/testdevapidocs/allclasses-frame.html
index 9823f75..65e18a5 100644
--- a/testdevapidocs/allclasses-frame.html
+++ b/testdevapidocs/allclasses-frame.html
@@ -1966,6 +1966,9 @@
 <li><a href="org/apache/hadoop/hbase/client/TestReplicaWithCluster.RegionServerHostingPrimayMetaRegionSlowOrStopCopro.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestReplicaWithCluster.RegionServerHostingPrimayMetaRegionSlowOrStopCopro</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestReplicaWithCluster.RegionServerStoppedCopro.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestReplicaWithCluster.RegionServerStoppedCopro</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestReplicaWithCluster.SlowMeCopro.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestReplicaWithCluster.SlowMeCopro</a></li>
+<li><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestReportOnlineRegionsRace</a></li>
+<li><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestReportOnlineRegionsRace.AssignmentManagerForTest</a></li>
+<li><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestReportOnlineRegionsRace.HMasterForTest</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/TestReseekTo.html" title="class in org.apache.hadoop.hbase.io.hfile" target="classFrame">TestReseekTo</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestResettingCounters.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestResettingCounters</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/TestResourceFilter.html" title="class in org.apache.hadoop.hbase.rest" target="classFrame">TestResourceFilter</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/testdevapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-noframe.html b/testdevapidocs/allclasses-noframe.html
index d68aab5..d037286 100644
--- a/testdevapidocs/allclasses-noframe.html
+++ b/testdevapidocs/allclasses-noframe.html
@@ -1966,6 +1966,9 @@
 <li><a href="org/apache/hadoop/hbase/client/TestReplicaWithCluster.RegionServerHostingPrimayMetaRegionSlowOrStopCopro.html" title="class in org.apache.hadoop.hbase.client">TestReplicaWithCluster.RegionServerHostingPrimayMetaRegionSlowOrStopCopro</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestReplicaWithCluster.RegionServerStoppedCopro.html" title="class in org.apache.hadoop.hbase.client">TestReplicaWithCluster.RegionServerStoppedCopro</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestReplicaWithCluster.SlowMeCopro.html" title="class in org.apache.hadoop.hbase.client">TestReplicaWithCluster.SlowMeCopro</a></li>
+<li><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace</a></li>
+<li><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace.AssignmentManagerForTest</a></li>
+<li><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace.HMasterForTest</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/TestReseekTo.html" title="class in org.apache.hadoop.hbase.io.hfile">TestReseekTo</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestResettingCounters.html" title="class in org.apache.hadoop.hbase.regionserver">TestResettingCounters</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/TestResourceFilter.html" title="class in org.apache.hadoop.hbase.rest">TestResourceFilter</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index 33f7b1d..dc8eb20 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -1456,6 +1456,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestSyncReplicationNewRSJoinBetweenRefreshes.html#ARRIVE">ARRIVE</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestSyncReplicationNewRSJoinBetweenRefreshes.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationNewRSJoinBetweenRefreshes</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#ARRIVE_RS_REPORT">ARRIVE_RS_REPORT</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/model/TestModelBase.html#AS_JSON">AS_JSON</a></span> - Variable in class org.apache.hadoop.hbase.rest.model.<a href="org/apache/hadoop/hbase/rest/model/TestModelBase.html" title="class in org.apache.hadoop.hbase.rest.model">TestModelBase</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/model/TestModelBase.html#AS_PB">AS_PB</a></span> - Variable in class org.apache.hadoop.hbase.rest.model.<a href="org/apache/hadoop/hbase/rest/model/TestModelBase.html" title="class in org.apache.hadoop.hbase.rest.model">TestModelBase</a></dt>
@@ -2015,6 +2017,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#assignmentManager">assignmentManager</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html" title="class in org.apache.hadoop.hbase.util">BaseTestHBaseFsck</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html#AssignmentManagerForTest-org.apache.hadoop.hbase.master.MasterServices-">AssignmentManagerForTest(MasterServices)</a></span> - Constructor for class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace.AssignmentManagerForTest</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/assignment/AssignmentTestingUtil.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">AssignmentTestingUtil</span></a> - Class in <a href="org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/AssignmentTestingUtil.html#AssignmentTestingUtil--">AssignmentTestingUtil()</a></span> - Constructor for class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/AssignmentTestingUtil.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentTestingUtil</a></dt>
@@ -3415,6 +3419,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestModifyTableWhileMerging.html#CF">CF</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestModifyTableWhileMerging.html" title="class in org.apache.hadoop.hbase.master.assignment">TestModifyTableWhileMerging</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#CF">CF</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestTransitRegionStateProcedure.html#CF">CF</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestTransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestTransitRegionStateProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/TestCloneSnapshotProcedure.html#CF">CF</a></span> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestCloneSnapshotProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestCloneSnapshotProcedure</a></dt>
@@ -5185,6 +5191,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionStates.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionStates</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRogueRSAssignment</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestSplitTableRegionProcedure</a></dt>
@@ -9620,6 +9628,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/example/TestZooKeeperTableArchiveClient.html#createArchiveDirectory--">createArchiveDirectory()</a></span> - Method in class org.apache.hadoop.hbase.backup.example.<a href="org/apache/hadoop/hbase/backup/example/TestZooKeeperTableArchiveClient.html" title="class in org.apache.hadoop.hbase.backup.example">TestZooKeeperTableArchiveClient</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html#createAssignmentManager-org.apache.hadoop.hbase.master.MasterServices-">createAssignmentManager(MasterServices)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace.HMasterForTest</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestCloseAnOpeningRegion.MockHMaster.html#createAssignmentManager-org.apache.hadoop.hbase.master.MasterServices-">createAssignmentManager(MasterServices)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestCloseAnOpeningRegion.MockHMaster.html" title="class in org.apache.hadoop.hbase.master">TestCloseAnOpeningRegion.MockHMaster</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#createAssignProcedure-org.apache.hadoop.hbase.client.RegionInfo-">createAssignProcedure(RegionInfo)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html" title="class in org.apache.hadoop.hbase.master.assignment">TestAssignmentManagerBase</a></dt>
@@ -15091,6 +15101,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestHBaseFsckEncryption.html#findStorefilePaths-org.apache.hadoop.hbase.TableName-">findStorefilePaths(TableName)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestHBaseFsckEncryption.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckEncryption</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#FINISH_RS_REPORT">FINISH_RS_REPORT</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestCompaction.StoreMockMaker.html#finishCompaction-java.util.List-">finishCompaction(List&lt;HStoreFile&gt;)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestCompaction.StoreMockMaker.html" title="class in org.apache.hadoop.hbase.regionserver">TestCompaction.StoreMockMaker</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/BufferingScanResultConsumer.html#finished">finished</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/BufferingScanResultConsumer.html" title="class in org.apache.hadoop.hbase.client">BufferingScanResultConsumer</a></dt>
@@ -20553,6 +20565,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestCompactionPolicy.html#hlog">hlog</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestCompactionPolicy.html" title="class in org.apache.hadoop.hbase.regionserver">TestCompactionPolicy</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html#HMasterForTest-org.apache.hadoop.conf.Configuration-">HMasterForTest(Configuration)</a></span> - Constructor for class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace.HMasterForTest</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/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>
@@ -27363,6 +27377,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionReplicaSplit.html#name">name</a></span> - Variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionReplicaSplit.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionReplicaSplit</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#NAME">NAME</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#name">name</a></span> - Variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRogueRSAssignment</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html#name">name</a></span> - Variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestSplitTableRegionProcedure</a></dt>
@@ -33991,10 +34007,14 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html#reportLatency">reportLatency</a></span> - Variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html#reportOnlineRegions-org.apache.hadoop.hbase.ServerName-java.util.Set-">reportOnlineRegions(ServerName, Set&lt;byte[]&gt;)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace.AssignmentManagerForTest</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MockRegionServer.html#reportRegionSizesForQuotas-org.apache.hadoop.hbase.quotas.RegionSizeStore-">reportRegionSizesForQuotas(RegionSizeStore)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MockRegionServer.html" title="class in org.apache.hadoop.hbase.master">MockRegionServer</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/MockRegionServerServices.html#reportRegionSizesForQuotas-org.apache.hadoop.hbase.quotas.RegionSizeStore-">reportRegionSizesForQuotas(RegionSizeStore)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/MockRegionServerServices.html" title="class in org.apache.hadoop.hbase">MockRegionServerServices</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html#reportRegionStateTransition-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest-">reportRegionStateTransition(RegionServerStatusProtos.ReportRegionStateTransitionRequest)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace.AssignmentManagerForTest</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MockRegionServer.html#reportRegionStateTransition-org.apache.hadoop.hbase.regionserver.RegionServerServices.RegionStateTransitionContext-">reportRegionStateTransition(RegionServerServices.RegionStateTransitionContext)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MockRegionServer.html" title="class in org.apache.hadoop.hbase.master">MockRegionServer</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/MockRegionServerServices.html#reportRegionStateTransition-org.apache.hadoop.hbase.regionserver.RegionServerServices.RegionStateTransitionContext-">reportRegionStateTransition(RegionServerServices.RegionStateTransitionContext)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/MockRegionServerServices.html" title="class in org.apache.hadoop.hbase">MockRegionServerServices</a></dt>
@@ -34468,6 +34488,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/RESTApiClusterManager.html#resume-org.apache.hadoop.hbase.ClusterManager.ServiceType-java.lang.String-int-">resume(ClusterManager.ServiceType, String, int)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/RESTApiClusterManager.html" title="class in org.apache.hadoop.hbase">RESTApiClusterManager</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#RESUME_REPORT_STATE">RESUME_REPORT_STATE</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#RESUME_RS_REPORT">RESUME_RS_REPORT</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/DualAsyncFSWALForTest.html#resumeLogRoll--">resumeLogRoll()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/DualAsyncFSWALForTest.html" title="class in org.apache.hadoop.hbase.replication">DualAsyncFSWALForTest</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHStore.MyList.html#retainAll-java.util.Collection-">retainAll(Collection&lt;?&gt;)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHStore.MyList.html" title="class in org.apache.hadoop.hbase.regionserver">TestHStore.MyList</a></dt>
@@ -37813,6 +37837,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionStates.html#setUp--">setUp()</a></span> - Static method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionStates</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#setUp--">setUp()</a></span> - Static method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#setup--">setup()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRogueRSAssignment</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html#setup--">setup()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestSplitTableRegionProcedure</a></dt>
@@ -43315,6 +43341,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionStates.html#tearDown--">tearDown()</a></span> - Static method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionStates</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#tearDown--">tearDown()</a></span> - Static method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#tearDown--">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRogueRSAssignment</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html#tearDown--">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestSplitTableRegionProcedure</a></dt>
@@ -59247,6 +59275,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestGetProcedureResult.html#testRace--">testRace()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestGetProcedureResult.html" title="class in org.apache.hadoop.hbase.client">TestGetProcedureResult</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#testRace--">testRace()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.html#testRace--">testRace()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRaceWhenCreatingReplicationSource</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScanner.html#testRaceBetweenClientAndTimeout--">testRaceBetweenClientAndTimeout()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScanner.html" title="class in org.apache.hadoop.hbase.regionserver">TestScanner</a></dt>
@@ -61048,6 +61078,14 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/TestRegionSizeImpl.html#testReportingWithSizeChanges--">testReportingWithSizeChanges()</a></span> - Method in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/TestRegionSizeImpl.html" title="class in org.apache.hadoop.hbase.quotas">TestRegionSizeImpl</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportOnlineRegionsRace</span></a> - Class in <a href="org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#TestReportOnlineRegionsRace--">TestReportOnlineRegionsRace()</a></span> - Constructor for class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportOnlineRegionsRace.AssignmentManagerForTest</span></a> - Class in <a href="org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportOnlineRegionsRace.HMasterForTest</span></a> - Class in <a href="org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#testReportRSWithWrongRegion--">testReportRSWithWrongRegion()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRogueRSAssignment</a></dt>
 <dd>
 <div class="block">Ignore this test, see HBASE-21421</div>
@@ -68645,6 +68683,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionStates.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionStates</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRogueRSAssignment</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestSplitTableRegionProcedure</a></dt>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/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 2c35aaa..fe6fc0d 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
@@ -3503,58 +3503,62 @@
 </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">TestMasterAbortWhileMergingTable.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestReportOnlineRegionsRace.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.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">TestSplitTableRegionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMasterAbortWhileMergingTable.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.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">TestRegionReplicaSplit.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionReplicaSplit.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestSplitTableRegionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.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">TestCloseRegionWhileRSCrash.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestCloseRegionWhileRSCrash.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestRegionReplicaSplit.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionReplicaSplit.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">TestRegionStates.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionStates.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestCloseRegionWhileRSCrash.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestCloseRegionWhileRSCrash.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">TestTransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestTransitRegionStateProcedure.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestRegionStates.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionStates.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">TestAssignmentManagerUtil.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerUtil.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestTransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestTransitRegionStateProcedure.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">TestRegionMoveAndAbandon.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestAssignmentManagerUtil.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerUtil.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">TestRogueRSAssignment.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestRegionMoveAndAbandon.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.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">TestAssignmentOnRSCrash.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestRogueRSAssignment.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.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">TestMergeTableRegionsProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestAssignmentOnRSCrash.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.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">TestAMServerFailedOpen.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestAMServerFailedOpen.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMergeTableRegionsProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.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">TestAMAssignWithRandExec.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestAMAssignWithRandExec.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestAMServerFailedOpen.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestAMServerFailedOpen.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">TestAMAssignWithRandExec.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestAMAssignWithRandExec.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">TestAssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManager.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 </tbody>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
index 2b872c0..b811de6 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
@@ -2244,42 +2244,46 @@
 <td class="colLast"><span class="typeNameLabel">TestModifyTableWhileMerging.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestModifyTableWhileMerging.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TestReportOnlineRegionsRace.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#UTIL">UTIL</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMasterAbortWhileMergingTable.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestSplitTableRegionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestCloseRegionWhileRSCrash.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestCloseRegionWhileRSCrash.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestRegionStates.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionStates.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestTransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestTransitRegionStateProcedure.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAssignmentManagerUtil.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerUtil.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestRegionMoveAndAbandon.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestRogueRSAssignment.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAssignmentOnRSCrash.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMergeTableRegionsProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/testdevapidocs/org/apache/hadoop/hbase/master/assignment/MockMasterServices.MockRegionStateStore.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/MockMasterServices.MockRegionStateStore.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/MockMasterServices.MockRegionStateStore.html
index 7b22076..85fe76c 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/MockMasterServices.MockRegionStateStore.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/MockMasterServices.MockRegionStateStore.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.323">MockMasterServices.MockRegionStateStore</a>
+<pre>private static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#line.317">MockMasterServices.MockRegionStateStore</a>
 extends org.apache.hadoop.hbase.master.assignment.RegionStateStore</pre>
 </li>
 </ul>
@@ -224,7 +224,7 @@ extends org.apache.hadoop.hbase.master.assignment.RegionStateStore</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MockRegionStateStore</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.MockRegionStateStore.html#line.324">MockRegionStateStore</a>(org.apache.hadoop.hbase.master.MasterServices&nbsp;master)</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.MockRegionStateStore.html#line.318">MockRegionStateStore</a>(org.apache.hadoop.hbase.master.MasterServices&nbsp;master)</pre>
 </li>
 </ul>
 </li>
@@ -241,7 +241,7 @@ extends org.apache.hadoop.hbase.master.assignment.RegionStateStore</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>updateRegionLocation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.MockRegionStateStore.html#line.329">updateRegionLocation</a>(org.apache.hadoop.hbase.master.assignment.RegionStateNode&nbsp;regionNode)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.MockRegionStateStore.html#line.323">updateRegionLocation</a>(org.apache.hadoop.hbase.master.assignment.RegionStateNode&nbsp;regionNode)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>


[25/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 003d052..c630be0 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -291,10 +291,10 @@
 <th><img src="images/icon_warning_sml.gif" alt="" />&#160;Warnings</th>
 <th><img src="images/icon_error_sml.gif" alt="" />&#160;Errors</th></tr>
 <tr class="b">
-<td>3804</td>
+<td>3805</td>
 <td>0</td>
 <td>0</td>
-<td>15075</td></tr></table></div>
+<td>15073</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -4797,7 +4797,7 @@
 <td><a href="#org.apache.hadoop.hbase.master.assignment.AssignmentManager.java">org/apache/hadoop/hbase/master/assignment/AssignmentManager.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>12</td></tr>
+<td>11</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.GCMergedRegionsProcedure.java">org/apache/hadoop/hbase/master/assignment/GCMergedRegionsProcedure.java</a></td>
 <td>0</td>
@@ -5687,7 +5687,7 @@
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>4</td></tr>
+<td>3</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.util.DelayedUtil.java">org/apache/hadoop/hbase/procedure2/util/DelayedUtil.java</a></td>
 <td>0</td>
@@ -9729,7 +9729,7 @@
 <tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_blocks.html#NeedBraces">NeedBraces</a></td>
-<td>1793</td>
+<td>1792</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>coding</td>
@@ -9826,12 +9826,12 @@
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#JavadocTagContinuationIndentation">JavadocTagContinuationIndentation</a>
 <ul>
 <li>offset: <tt>&quot;2&quot;</tt></li></ul></td>
-<td>731</td>
+<td>730</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#NonEmptyAtclauseDescription">NonEmptyAtclauseDescription</a></td>
-<td>3494</td>
+<td>3495</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>misc</td>
@@ -9849,7 +9849,7 @@
 <ul>
 <li>max: <tt>&quot;100&quot;</tt></li>
 <li>ignorePattern: <tt>&quot;^package.*|^import.*|a href|href|http://|https://|ftp://|org.apache.thrift.|com.google.protobuf.|hbase.protobuf.generated&quot;</tt></li></ul></td>
-<td>1443</td>
+<td>1442</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td></td>
@@ -19125,7 +19125,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 0 has parse error. Details: no viable alternative at input '   *' while parsing JAVADOC_TAG</td>
 <td>117</td></tr>
 <tr class="a">
@@ -63557,167 +63557,161 @@
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>990</td></tr>
+<td>1163</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>1205</td></tr>
+<td>1165</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>1207</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>1399</td></tr>
-<tr class="a">
+<td>1357</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>1401</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>1404</td></tr>
+<td>1359</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>1409</td></tr>
+<td>1362</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>1712</td></tr>
+<td>1367</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>1837</td></tr>
+<td>1670</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>1795</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'lambda arguments' has incorrect indentation level 8, expected level should be 6.</td>
-<td>1885</td></tr>
-<tr class="a">
+<td>1843</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>1902</td></tr></table></div>
+<td>1860</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.assignment.GCMergedRegionsProcedure.java">org/apache/hadoop/hbase/master/assignment/GCMergedRegionsProcedure.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'extends' has incorrect indentation level 0, expected level should be 2.</td>
 <td>46</td></tr>
-<tr class="b">
+<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>74</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>80</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>82</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>83</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>84</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>85</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>86</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>87</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>88</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>89</td></tr>
-<tr class="b">
+<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 102).</td>
 <td>89</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>90</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>91</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>92</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -63726,193 +63720,193 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.assignment.GCRegionProcedure.java">org/apache/hadoop/hbase/master/assignment/GCRegionProcedure.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<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>67</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>74</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>76</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>77</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>78</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>79</td></tr>
-<tr class="b">
+<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 10.</td>
 <td>80</td></tr>
-<tr class="a">
+<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>81</td></tr>
-<tr class="b">
+<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 10, expected level should be 12.</td>
 <td>81</td></tr>
-<tr class="a">
+<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 101).</td>
 <td>81</td></tr>
-<tr class="b">
+<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 10, expected level should be 12.</td>
 <td>82</td></tr>
-<tr class="a">
+<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 8, expected level should be 10.</td>
 <td>83</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>84</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>85</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>86</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>89</td></tr>
-<tr class="b">
+<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 10.</td>
 <td>90</td></tr>
-<tr class="a">
+<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 12.</td>
 <td>91</td></tr>
-<tr class="b">
+<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 14.</td>
 <td>92</td></tr>
-<tr class="a">
+<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 12.</td>
 <td>93</td></tr>
-<tr class="b">
+<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 10.</td>
 <td>94</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>95</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>96</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>97</td></tr>
-<tr class="b">
+<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 10.</td>
 <td>98</td></tr>
-<tr class="a">
+<tr class="b">
 <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 10, expected level should be 12.</td>
 <td>99</td></tr>
-<tr class="b">
+<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 10.</td>
 <td>100</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>101</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>102</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>103</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -63921,19 +63915,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.assignment.MergeTableRegionsProcedure.java">org/apache/hadoop/hbase/master/assignment/MergeTableRegionsProcedure.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<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>539</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -63942,58 +63936,58 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.assignment.MockMasterServices.java">org/apache/hadoop/hbase/master/assignment/MockMasterServices.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<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>108</td></tr>
-<tr class="b">
+<td>106</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 101).</td>
-<td>171</td></tr></table></div>
+<td>165</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.assignment.RegionStateStore.java">org/apache/hadoop/hbase/master/assignment/RegionStateStore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<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>103</td></tr>
-<tr class="a">
+<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>106</td></tr>
-<tr class="b">
+<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>110</td></tr>
-<tr class="a">
+<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>113</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -64002,91 +63996,91 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.assignment.RegionStates.java">org/apache/hadoop/hbase/master/assignment/RegionStates.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<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>145</td></tr>
-<tr class="a">
+<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>157</td></tr>
-<tr class="b">
+<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>166</td></tr>
-<tr class="a">
+<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>175</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>347</td></tr>
-<tr class="a">
+<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>353</td></tr>
-<tr class="b">
+<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>354</td></tr>
-<tr class="a">
+<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>552</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' has incorrect indentation level 8, expected level should be 6.</td>
 <td>591</td></tr>
-<tr class="a">
+<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 8.</td>
 <td>592</td></tr>
-<tr class="b">
+<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 10.</td>
 <td>593</td></tr>
-<tr class="a">
+<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 8.</td>
 <td>594</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for rcurly' has incorrect indentation level 8, expected level should be 6.</td>
 <td>595</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -64095,37 +64089,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.java">org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<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>145</td></tr>
-<tr class="b">
+<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 106).</td>
 <td>150</td></tr>
-<tr class="a">
+<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>152</td></tr>
-<tr class="b">
+<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 102).</td>
 <td>169</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -64134,13 +64128,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.assignment.TestAssignmentOnRSCrash.java">org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -64149,13 +64143,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.assignment.TestRegionStates.java">org/apache/hadoop/hbase/master/assignment/TestRegionStates.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -64164,19 +64158,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.assignment.TestSplitTableRegionProcedure.java">org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<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 0, expected level should be 2.</td>
 <td>172</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -64185,13 +64179,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.BalancerChore.java">org/apache/hadoop/hbase/master/balancer/BalancerChore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -64200,451 +64194,451 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.BalancerTestBase.java">org/apache/hadoop/hbase/master/balancer/BalancerTestBase.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>80</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>81</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>82</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>83</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>84</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>85</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>86</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>87</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>88</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>89</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>90</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>91</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>92</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>97</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>98</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>99</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>101</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>102</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>103</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>104</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>105</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>106</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>107</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>108</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>109</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>110</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>111</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>113</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>114</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>115</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>116</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>117</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>118</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>120</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>121</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>122</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>123</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>124</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>125</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>126</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>127</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>128</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>129</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>131</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>133</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>134</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>136</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>137</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>138</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>139</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>140</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>141</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>142</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>143</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>144</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>145</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>146</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>147</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>148</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>149</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>150</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>151</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>152</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>153</td></tr>
-<tr class="b">
+<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>237</td></tr>
-<tr class="a">
+<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 118).</td>
 <td>237</td></tr>
-<tr class="b">
+<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 114).</td>
 <td>246</td></tr>
-<tr class="a">
+<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>329</td></tr>
-<tr class="b">
+<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>330</td></tr>
-<tr class="a">
+<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>363</td></tr>
-<tr class="b">
+<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 104).</td>
 <td>377</td></tr>
-<tr class="a">
+<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 150).</td>
 <td>401</td></tr>
-<tr class="b">
+<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>422</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -64653,373 +64647,373 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.yetus.audience.InterfaceAudience' import.</td>
 <td>63</td></tr>
-<tr class="b">
+<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 107).</td>
 <td>130</td></tr>
-<tr class="a">
+<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 104).</td>
 <td>147</td></tr>
-<tr class="b">
+<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 102).</td>
 <td>148</td></tr>
-<tr class="a">
+<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 102).</td>
 <td>149</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 259 lines (max allowed is 150).</td>
 <td>194</td></tr>
-<tr class="a">
+<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 114).</td>
 <td>304</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'type' must be private and have accessor methods.</td>
 <td>629</td></tr>
-<tr class="a">
+<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>630</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 33 should have line break after.</td>
 <td>630</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 34 should have line break after.</td>
 <td>632</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 32 should have line break after.</td>
 <td>634</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'region' must be private and have accessor methods.</td>
 <td>638</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'server' must be private and have accessor methods.</td>
 <td>639</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'region' must be private and have accessor methods.</td>
 <td>658</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'fromServer' must be private and have accessor methods.</td>
 <td>659</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'toServer' must be private and have accessor methods.</td>
 <td>660</td></tr>
-<tr class="b">
+<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>670</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'fromServer' must be private and have accessor methods.</td>
 <td>679</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'fromRegion' must be private and have accessor methods.</td>
 <td>680</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'toServer' must be private and have accessor methods.</td>
 <td>681</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'toRegion' must be private and have accessor methods.</td>
 <td>682</td></tr>
-<tr class="a">
+<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>692</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>706</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>707</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>710</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>711</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>712</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>713</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>714</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>716</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>717</td></tr>
-<tr class="a">
+<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 102).</td>
 <td>717</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>718</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>719</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>720</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>721</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>723</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>724</td></tr>
-<tr class="b">
+<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 113).</td>
 <td>724</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>725</td></tr>
-<tr class="b">
+<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 109).</td>
 <td>725</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>726</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>727</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>728</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>729</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>730</td></tr>
-<tr class="b">
+<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 103).</td>
 <td>741</td></tr>
-<tr class="a">
+<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 113).</td>
 <td>761</td></tr>
-<tr class="b">
+<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 108).</td>
 <td>841</td></tr>
-<tr class="a">
+<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 108).</td>
 <td>856</td></tr>
-<tr class="b">
+<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>1023</td></tr>
-<tr class="a">
+<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>1024</td></tr>
-<tr class="b">
+<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>1026</td></tr>
-<tr class="a">
+<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>1027</td></tr>
-<tr class="b">
+<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>1058</td></tr>
-<tr class="a">
+<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>1064</td></tr>
-<tr class="b">
+<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>1087</td></tr>
-<tr class="a">
+<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>1089</td></tr>
-<tr class="b">
+<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>1181</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -65028,13 +65022,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.ClusterLoadState.java">org/apache/hadoop/hbase/master/balancer/ClusterLoadState.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -65043,13 +65037,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.ClusterStatusChore.java">org/apache/hadoop/hbase/master/balancer/ClusterStatusChore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -65058,19 +65052,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.FavoredStochasticBalancer.java">org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'segregateRegionsAndAssignRegionsWithFavoredNodes' has incorrect indentation level 2, expected level should be 4.</td>
 <td>201</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
@@ -65079,25 +65073,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory.java">org/apache/hadoop/hbase/master/balancer/LoadBalancerFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.conf.Configuration' import.</td>
 <td>21</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>29</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -65106,13 +65100,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.LoadBalancerPerformanceEvaluation.java">org/apache/hadoop/hbase/master/balancer/LoadBalancerPerformanceEvaluation.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -65121,19 +65115,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.RegionInfoComparator.java">org/apache/hadoop/hbase/master/balancer/RegionInfoComparator.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<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>34</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -65142,25 +65136,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.RegionLocationFinder.java">org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<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 102).</td>
 <td>64</td></tr>
-<tr class="b">
+<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>214</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -65169,13 +65163,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.ServerAndLoad.java">org/apache/hadoop/hbase/master/balancer/ServerAndLoad.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -65184,205 +65178,205 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.SimpleLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<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 103).</td>
 <td>113</td></tr>
-<tr class="b">
+<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>115</td></tr>
-<tr class="a">
+<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 114).</td>
 <td>115</td></tr>
-<tr class="b">
+<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 112).</td>
 <td>134</td></tr>
-<tr class="a">
+<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 206 lines (max allowed is 150).</td>
 <td>246</td></tr>
-<tr class="b">
+<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>266</td></tr>
-<tr class="a">
+<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>316</td></tr>
-<tr class="b">
+<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>320</td></tr>
-<tr class="a">
+<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>335</td></tr>
-<tr class="b">
+<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>354</td></tr>
-<tr class="a">
+<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>357</td></tr>
-<tr class="b">
+<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>366</td></tr>
-<tr class="a">
+<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>387</td></tr>
-<tr class="b">
+<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>389</td></tr>
-<tr class="a">
+<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>408</td></tr>
-<tr class="b">
+<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>438</td></tr>
-<tr class="a">
+<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 102).</td>
 <td>456</td></tr>
-<tr class="b">
+<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 109).</td>
 <td>461</td></tr>
-<tr class="a">
+<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 107).</td>
 <td>462</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
 <td>462</td></tr>
-<tr class="a">
+<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 112).</td>
 <td>464</td></tr>
-<tr class="b">
+<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 107).</td>
 <td>502</td></tr>
-<tr class="a">
+<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 120).</td>
 <td>503</td></tr>
-<tr class="b">
+<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 109).</td>
 <td>504</td></tr>
-<tr class="a">
+<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>516</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
 <td>517</td></tr>
-<tr class="a">
+<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 102).</td>
 <td>533</td></tr>
-<tr class="b">
+<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>540</td></tr>
-<tr class="a">
+<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 102).</td>
 <td>561</td></tr>
-<tr class="b">
+<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>562</td></tr>
-<tr class="a">
+<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 101).</td>
 <td>568</td></tr>
-<tr class="b">
+<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>585</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -65391,199 +65385,199 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.StochasticLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <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 8, expected level should be 6.</td>
 <td>253</td></tr>
-<tr class="b">
+<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>268</td></tr>
-<tr class="a">
+<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>270</td></tr>
-<tr class="b">
+<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>460</td></tr>
-<tr class="a">
+<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>568</td></tr>
-<tr class="b">
+<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 107).</td>
 <td>801</td></tr>
-<tr class="a">
+<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 109).</td>
 <td>817</td></tr>
-<tr class="b">
+<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 116).</td>
 <td>831</td></tr>
-<tr class="a">
+<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 114).</td>
 <td>835</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>866</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1007</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1008</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>1009</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>1010</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>1011</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1012</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>1013</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>1014</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>1015</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1016</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>1017</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>1018</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>1019</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>1020</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1021</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>1022</td></tr>
-<tr class="a">
+<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 119).</td>
 <td>1032</td></tr>
-<tr class="b">
+<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>1093</td></tr>
-<tr class="a">
+<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 106).</td>
 <td>1300</td></tr>
-<tr class="b">
+<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 106).</td>
 <td>1301</td></tr>
-<tr class="a">
+<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 109).</td>
 <td>1305</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -65592,19 +65586,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.TestBalancerStatusTagInJMXMetrics.java">org/apache/hadoop/hbase/master/balancer/TestBalancerStatusTagInJMXMetrics.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>IllegalImport</td>
 <td>Illegal import - org.apache.commons.logging.Log.</td>
 <td>18</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>IllegalImport</td>
@@ -65613,103 +65607,103 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.TestBaseLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>84</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>85</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>86</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>87</td></tr>
-<tr class="a">
+<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>133</td></tr>
-<tr class="b">
+<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>134</td></tr>
-<tr class="a">
+<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>135</td></tr>
-<tr class="b">
+<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>150</td></tr>
-<tr class="a">
+<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>191</td></tr>
-<tr class="b">
+<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 108).</td>
 <td>256</td></tr>
-<tr class="a">
+<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 108).</td>
 <td>337</td></tr>
-<tr class="b">
+<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>432</td></tr>
-<tr class="a">
+<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>433</td></tr>
-<tr class="b">
+<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>434</td></tr>
-<tr class="a">
+<tr class="b">
 <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>444</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -65718,295 +65712,295 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.TestDefaultLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/TestDefaultLoadBalancer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>74</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>75</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>76</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>78</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>79</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>80</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level shoul

<TRUNCATED>

[05/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html
new file mode 100644
index 0000000..b3a77ab
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html
@@ -0,0 +1,463 @@
+<!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>TestReportOnlineRegionsRace (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="TestReportOnlineRegionsRace (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":9,"i1":9,"i2":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestReportOnlineRegionsRace.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" target="_top">Frames</a></li>
+<li><a href="TestReportOnlineRegionsRace.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.master.assignment</div>
+<h2 title="Class TestReportOnlineRegionsRace" class="title">Class TestReportOnlineRegionsRace</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.master.assignment.TestReportOnlineRegionsRace</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#line.58">TestReportOnlineRegionsRace</a>
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
+<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace.AssignmentManagerForTest</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace.HMasterForTest</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#ARRIVE_RS_REPORT">ARRIVE_RS_REPORT</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static byte[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#CF">CF</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"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#FINISH_RS_REPORT">FINISH_RS_REPORT</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static org.apache.hadoop.hbase.TableName</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#NAME">NAME</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#RESUME_REPORT_STATE">RESUME_REPORT_STATE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#RESUME_RS_REPORT">RESUME_RS_REPORT</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#UTIL">UTIL</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#TestReportOnlineRegionsRace--">TestReportOnlineRegionsRace</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#setUp--">setUp</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#tearDown--">tearDown</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#testRace--">testRace</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="CLASS_RULE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>CLASS_RULE</h4>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#line.61">CLASS_RULE</a></pre>
+</li>
+</ul>
+<a name="ARRIVE_RS_REPORT">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>ARRIVE_RS_REPORT</h4>
+<pre>private static volatile&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#line.64">ARRIVE_RS_REPORT</a></pre>
+</li>
+</ul>
+<a name="RESUME_RS_REPORT">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>RESUME_RS_REPORT</h4>
+<pre>private static volatile&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#line.65">RESUME_RS_REPORT</a></pre>
+</li>
+</ul>
+<a name="FINISH_RS_REPORT">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>FINISH_RS_REPORT</h4>
+<pre>private static volatile&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#line.66">FINISH_RS_REPORT</a></pre>
+</li>
+</ul>
+<a name="RESUME_REPORT_STATE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>RESUME_REPORT_STATE</h4>
+<pre>private static volatile&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#line.68">RESUME_REPORT_STATE</a></pre>
+</li>
+</ul>
+<a name="UTIL">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>UTIL</h4>
+<pre>private static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#line.119">UTIL</a></pre>
+</li>
+</ul>
+<a name="NAME">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>NAME</h4>
+<pre>private static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#line.121">NAME</a></pre>
+</li>
+</ul>
+<a name="CF">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>CF</h4>
+<pre>private static&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#line.123">CF</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="TestReportOnlineRegionsRace--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestReportOnlineRegionsRace</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#line.58">TestReportOnlineRegionsRace</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="setUp--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setUp</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#line.126">setUp</a>()
+                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="tearDown--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>tearDown</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#line.135">tearDown</a>()
+                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testRace--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testRace</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#line.140">testRace</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/TestReportOnlineRegionsRace.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" target="_top">Frames</a></li>
+<li><a href="TestReportOnlineRegionsRace.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/b9b09fec/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html
index 64febbc..429444f 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -543,7 +543,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

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

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
index 6fb22ab..c8b76bd 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
@@ -81,7 +81,25 @@
 <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.master.assignment.AssignmentManager (implements org.apache.hadoop.hbase.master.ServerListener)
+<ul>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportOnlineRegionsRace.AssignmentManagerForTest</span></a></li>
+</ul>
+</li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentTestingUtil.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">AssignmentTestingUtil</span></a></li>
+<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.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>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../../org/apache/hadoop/hbase/master/MockNoopMasterServices.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">MockNoopMasterServices</span></a> (implements org.apache.hadoop.hbase.master.MasterServices)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/MockMasterServices.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">MockMasterServices</span></a></li>
@@ -157,6 +175,7 @@
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRegionMoveAndAbandon</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionReplicaSplit.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRegionReplicaSplit</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRegionStates</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportOnlineRegionsRace</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRogueRSAssignment</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestSplitTableRegionProcedure</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestTransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestTransitRegionStateProcedure</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html
index f9dab78..f683eaa 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.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/procedure/TestEnableTableProcedure.html#line.41">TestEnableTableProcedure</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html#line.40">TestEnableTableProcedure</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestTableDDLProcedureBase.html" title="class in org.apache.hadoop.hbase.master.procedure">TestTableDDLProcedureBase</a></pre>
 </li>
 </ul>
@@ -236,7 +236,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <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/procedure/TestEnableTableProcedure.html#line.44">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/procedure/TestEnableTableProcedure.html#line.43">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="LOG">
@@ -245,7 +245,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html#line.47">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html#line.46">LOG</a></pre>
 </li>
 </ul>
 <a name="name">
@@ -254,7 +254,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <ul class="blockListLast">
 <li class="blockList">
 <h4>name</h4>
-<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html#line.48">name</a></pre>
+<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html#line.49">name</a></pre>
 </li>
 </ul>
 </li>
@@ -271,7 +271,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestEnableTableProcedure</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html#line.41">TestEnableTableProcedure</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html#line.40">TestEnableTableProcedure</a>()</pre>
 </li>
 </ul>
 </li>
@@ -288,7 +288,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <ul class="blockList">
 <li class="blockList">
 <h4>testEnableTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html#line.51">testEnableTable</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html#line.52">testEnableTable</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>
@@ -302,7 +302,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <ul class="blockList">
 <li class="blockList">
 <h4>testEnableNonDisabledTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html#line.68">testEnableNonDisabledTable</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html#line.69">testEnableNonDisabledTable</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>
@@ -316,7 +316,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <ul class="blockList">
 <li class="blockList">
 <h4>testRecoveryAndDoubleExecution</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html#line.101">testRecoveryAndDoubleExecution</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html#line.94">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>
@@ -330,7 +330,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testRollbackAndDoubleExecution</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html#line.125">testRollbackAndDoubleExecution</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html#line.117">testRollbackAndDoubleExecution</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/b9b09fec/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html
index e00190e..c2a6917 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html#line.51">TestMasterProcedureEvents</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html#line.55">TestMasterProcedureEvents</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -231,7 +231,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>CLASS_RULE</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html#line.54">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/procedure/TestMasterProcedureEvents.html#line.58">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="LOG">
@@ -240,7 +240,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html#line.57">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html#line.61">LOG</a></pre>
 </li>
 </ul>
 <a name="UTIL">
@@ -249,7 +249,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>UTIL</h4>
-<pre>protected static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html#line.59">UTIL</a></pre>
+<pre>protected static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html#line.63">UTIL</a></pre>
 </li>
 </ul>
 <a name="name">
@@ -258,7 +258,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>name</h4>
-<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html#line.62">name</a></pre>
+<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html#line.66">name</a></pre>
 </li>
 </ul>
 </li>
@@ -275,7 +275,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestMasterProcedureEvents</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html#line.51">TestMasterProcedureEvents</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html#line.55">TestMasterProcedureEvents</a>()</pre>
 </li>
 </ul>
 </li>
@@ -292,7 +292,12 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setupConf</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html#line.64">setupConf</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html#line.68">setupConf</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></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
 </li>
 </ul>
 <a name="setupCluster--">
@@ -301,7 +306,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setupCluster</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html#line.70">setupCluster</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html#line.74">setupCluster</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>
@@ -315,7 +320,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupTest</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html#line.77">cleanupTest</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html#line.84">cleanupTest</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>
@@ -329,7 +334,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html#line.86">tearDown</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html#line.93">tearDown</a>()
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -343,7 +348,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testMasterInitializedEvent</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html#line.94">testMasterInitializedEvent</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html#line.101">testMasterInitializedEvent</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>
@@ -357,7 +362,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testProcedureEventWaitWake</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html#line.113">testProcedureEventWaitWake</a>(org.apache.hadoop.hbase.master.HMaster&nbsp;master,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html#line.120">testProcedureEventWaitWake</a>(org.apache.hadoop.hbase.master.HMaster&nbsp;master,
                                         org.apache.hadoop.hbase.procedure2.ProcedureEvent&lt;?&gt;&nbsp;event,
                                         org.apache.hadoop.hbase.procedure2.Procedure&lt;org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&gt;&nbsp;proc)
                                  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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html
index 48ca638..97c28d6 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.47">TestWALProcedureStoreOnHDFS</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.48">TestWALProcedureStoreOnHDFS</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -237,7 +237,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>CLASS_RULE</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.50">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/procedure/TestWALProcedureStoreOnHDFS.html#line.51">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="LOG">
@@ -246,7 +246,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.53">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.54">LOG</a></pre>
 </li>
 </ul>
 <a name="UTIL">
@@ -255,7 +255,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>UTIL</h4>
-<pre>protected static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.55">UTIL</a></pre>
+<pre>protected static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.56">UTIL</a></pre>
 </li>
 </ul>
 <a name="store">
@@ -264,7 +264,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>store</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.57">store</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.58">store</a></pre>
 </li>
 </ul>
 <a name="stopProcedureListener">
@@ -273,7 +273,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>stopProcedureListener</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureStoreListener <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.59">stopProcedureListener</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureStoreListener <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.60">stopProcedureListener</a></pre>
 </li>
 </ul>
 </li>
@@ -290,7 +290,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestWALProcedureStoreOnHDFS</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.47">TestWALProcedureStoreOnHDFS</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.48">TestWALProcedureStoreOnHDFS</a>()</pre>
 </li>
 </ul>
 </li>
@@ -307,7 +307,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>initConfig</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.71">initConfig</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.72">initConfig</a>()</pre>
 </li>
 </ul>
 <a name="setupDFS--">
@@ -316,7 +316,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setupDFS</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.84">setupDFS</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.85">setupDFS</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>
@@ -330,7 +330,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.96">tearDown</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.99">tearDown</a>()
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -344,7 +344,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testWalAbortOnLowReplication</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.108">testWalAbortOnLowReplication</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.111">testWalAbortOnLowReplication</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>
@@ -358,7 +358,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testWalAbortOnLowReplicationWithQueuedWriters</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.127">testWalAbortOnLowReplicationWithQueuedWriters</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.130">testWalAbortOnLowReplicationWithQueuedWriters</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>
@@ -372,7 +372,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testWalRollOnLowReplication</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.171">testWalRollOnLowReplication</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.174">testWalRollOnLowReplication</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>
@@ -386,7 +386,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>waitForNumReplicas</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.190">waitForNumReplicas</a>(int&nbsp;numReplicas)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html#line.193">waitForNumReplicas</a>(int&nbsp;numReplicas)
                         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/b9b09fec/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 fdfa6bb..a83d7e2 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -579,15 +579,15 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.Stat.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestRegionReplicaPerf.Stat</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.RoleCommand.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleCommand</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.Service.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.Service</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterManager.ServiceType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterManager.ServiceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</span></a></li>
 </ul>
 </li>
 </ul>

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


[19/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/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 c3171c5..0377974 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
@@ -2578,7 +2578,7 @@
 <span class="sourceLineNo">2570</span>        // Note: if the procedure throws exception, we will catch it and rethrow.<a name="line.2570"></a>
 <span class="sourceLineNo">2571</span>        final ProcedurePrepareLatch prepareLatch = ProcedurePrepareLatch.createLatch();<a name="line.2571"></a>
 <span class="sourceLineNo">2572</span>        submitProcedure(new EnableTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>            tableName, false, prepareLatch));<a name="line.2573"></a>
+<span class="sourceLineNo">2573</span>            tableName, prepareLatch));<a name="line.2573"></a>
 <span class="sourceLineNo">2574</span>        prepareLatch.await();<a name="line.2574"></a>
 <span class="sourceLineNo">2575</span><a name="line.2575"></a>
 <span class="sourceLineNo">2576</span>        getMaster().getMasterCoprocessorHost().postEnableTable(tableName);<a name="line.2576"></a>


[26/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Posted by gi...@apache.org.
Published site at 64c4861272aa03f714b4029ae7725f4286b77062.


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

Branch: refs/heads/asf-site
Commit: b9b09fecf98e115aa19f720214492e6d153b2f1b
Parents: 93f7e17
Author: jenkins <bu...@apache.org>
Authored: Tue Nov 13 14:51:46 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Tue Nov 13 14:51:46 2018 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |    4 +-
 apache_hbase_reference_guide.pdf                |    4 +-
 book.html                                       |    2 +-
 bulk-loads.html                                 |    4 +-
 checkstyle-aggregate.html                       | 2712 +++++++++---------
 checkstyle.rss                                  |   22 +-
 coc.html                                        |    4 +-
 dependencies.html                               |    4 +-
 dependency-convergence.html                     |    4 +-
 dependency-info.html                            |    4 +-
 dependency-management.html                      |    4 +-
 devapidocs/constant-values.html                 |    4 +-
 devapidocs/index-all.html                       |   14 +-
 .../hadoop/hbase/backup/package-tree.html       |    4 +-
 .../hadoop/hbase/class-use/ServerName.html      |    2 +-
 .../hadoop/hbase/class-use/TableName.html       |    8 +-
 .../hbase/class-use/YouAreDeadException.html    |   25 -
 .../hadoop/hbase/client/package-tree.html       |   24 +-
 .../hadoop/hbase/coprocessor/package-tree.html  |    2 +-
 .../hadoop/hbase/executor/package-tree.html     |    2 +-
 .../hadoop/hbase/filter/package-tree.html       |   10 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |    2 +-
 .../apache/hadoop/hbase/ipc/package-tree.html   |    2 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |    6 +-
 ...signmentManager.RegionInTransitionChore.html |    6 +-
 ...ssignmentManager.RegionInTransitionStat.html |   40 +-
 .../master/assignment/AssignmentManager.html    |  402 ++-
 .../assignment/class-use/ServerStateNode.html   |   11 +-
 .../hbase/master/balancer/package-tree.html     |    2 +-
 .../hadoop/hbase/master/package-tree.html       |    4 +-
 .../master/procedure/EnableTableProcedure.html  |   85 +-
 .../procedure/class-use/MasterProcedureEnv.html |    8 +-
 .../class-use/ProcedurePrepareLatch.html        |    3 +-
 .../hadoop/hbase/monitoring/package-tree.html   |    2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |   12 +-
 .../org/apache/hadoop/hbase/package-use.html    |    6 -
 ...ProcedureExecutor.KeepAliveWorkerThread.html |    6 +-
 .../ProcedureExecutor.WorkerMonitor.html        |   32 +-
 .../ProcedureExecutor.WorkerThread.html         |   20 +-
 .../hbase/procedure2/ProcedureExecutor.html     |  109 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    6 +-
 .../store/wal/WALProcedureStore.PushType.html   |   12 +-
 .../procedure2/store/wal/WALProcedureStore.html |  112 +-
 .../hadoop/hbase/quotas/package-tree.html       |    8 +-
 .../hadoop/hbase/regionserver/package-tree.html |   20 +-
 .../hbase/regionserver/wal/package-tree.html    |    4 +-
 .../replication/regionserver/package-tree.html  |    2 +-
 .../hbase/security/access/package-tree.html     |    4 +-
 .../hadoop/hbase/security/package-tree.html     |    4 +-
 .../hadoop/hbase/thrift/package-tree.html       |    2 +-
 .../hadoop/hbase/util/class-use/IdLock.html     |   13 +
 .../apache/hadoop/hbase/util/package-tree.html  |   10 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |    2 +-
 .../org/apache/hadoop/hbase/Version.html        |    4 +-
 .../master/HMaster.InitializationMonitor.html   |    2 +-
 .../master/HMaster.MasterStoppedException.html  |    2 +-
 .../hbase/master/HMaster.RedirectServlet.html   |    2 +-
 .../master/HMaster.TableDescriptorGetter.html   |    2 +-
 .../org/apache/hadoop/hbase/master/HMaster.html |    2 +-
 ...signmentManager.RegionInTransitionChore.html | 2042 +++++++------
 ...ssignmentManager.RegionInTransitionStat.html | 2042 +++++++------
 .../master/assignment/AssignmentManager.html    | 2042 +++++++------
 .../master/procedure/EnableTableProcedure.html  |  823 +++---
 ...ProcedureExecutor.KeepAliveWorkerThread.html |  353 +--
 ...edureExecutor.ProcedureExecutorListener.html |  353 +--
 .../procedure2/ProcedureExecutor.Testing.html   |  353 +--
 .../ProcedureExecutor.WorkerMonitor.html        |  353 +--
 .../ProcedureExecutor.WorkerThread.html         |  353 +--
 .../hbase/procedure2/ProcedureExecutor.html     |  353 +--
 .../wal/WALProcedureStore.LeaseRecovery.html    | 2325 +++++++--------
 .../store/wal/WALProcedureStore.PushType.html   | 2325 +++++++--------
 .../wal/WALProcedureStore.SyncMetrics.html      | 2325 +++++++--------
 .../procedure2/store/wal/WALProcedureStore.html | 2325 +++++++--------
 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                                  |   30 +-
 testdevapidocs/allclasses-frame.html            |    3 +
 testdevapidocs/allclasses-noframe.html          |    3 +
 testdevapidocs/index-all.html                   |   40 +
 .../hadoop/hbase/backup/package-tree.html       |    2 +-
 .../hbase/class-use/HBaseClassTestRule.html     |   30 +-
 .../hbase/class-use/HBaseTestingUtility.html    |   22 +-
 ...MockMasterServices.MockRegionStateStore.html |    6 +-
 .../master/assignment/MockMasterServices.html   |   70 +-
 .../master/assignment/TestRegionStates.html     |    4 +-
 ...ineRegionsRace.AssignmentManagerForTest.html |  355 +++
 ...tReportOnlineRegionsRace.HMasterForTest.html |  406 +++
 .../assignment/TestReportOnlineRegionsRace.html |  463 +++
 .../assignment/TestRogueRSAssignment.html       |    4 +-
 ...ineRegionsRace.AssignmentManagerForTest.html |  125 +
 ...tReportOnlineRegionsRace.HMasterForTest.html |  125 +
 .../class-use/TestReportOnlineRegionsRace.html  |  125 +
 .../hbase/master/assignment/package-frame.html  |    3 +
 .../master/assignment/package-summary.html      |   16 +-
 .../hbase/master/assignment/package-tree.html   |   19 +
 .../procedure/TestEnableTableProcedure.html     |   18 +-
 .../procedure/TestMasterProcedureEvents.html    |   29 +-
 .../procedure/TestWALProcedureStoreOnHDFS.html  |   28 +-
 .../org/apache/hadoop/hbase/package-tree.html   |   10 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    2 +-
 .../hadoop/hbase/regionserver/package-tree.html |    4 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |    2 +-
 testdevapidocs/overview-tree.html               |    7 +
 ...MockMasterServices.MockRegionStateStore.html |  684 +++--
 .../master/assignment/MockMasterServices.html   |  684 +++--
 ...ineRegionsRace.AssignmentManagerForTest.html |  260 ++
 ...tReportOnlineRegionsRace.HMasterForTest.html |  260 ++
 .../assignment/TestReportOnlineRegionsRace.html |  260 ++
 .../procedure/TestEnableTableProcedure.html     |  219 +-
 .../TestMasterFailoverWithProcedures.html       |    2 +-
 .../procedure/TestMasterProcedureEvents.html    |  269 +-
 .../procedure/TestWALProcedureStoreOnHDFS.html  |  337 +--
 131 files changed, 14751 insertions(+), 12460 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index bf3893f..d7a51a2 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index ef5eeaf..c3e201d 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:20181112143317+00'00')
-/CreationDate (D:20181112144934+00'00')
+/ModDate (D:20181113143306+00'00')
+/CreationDate (D:20181113144824+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index c40f01b..88bf7e3 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-12 14:33:17 UTC
+Last updated 2018-11-13 14:33:06 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index 7a9bc47..9a597f0 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 


[13/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.Testing.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.Testing.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.Testing.html
index 9fd7e0b..fb34e18 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.Testing.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.Testing.html
@@ -1923,188 +1923,193 @@
 <span class="sourceLineNo">1915</span>    return completed.size();<a name="line.1915"></a>
 <span class="sourceLineNo">1916</span>  }<a name="line.1916"></a>
 <span class="sourceLineNo">1917</span><a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>  // ==========================================================================<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  //  Worker Thread<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>  // ==========================================================================<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>  private class WorkerThread extends StoppableThread {<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>    private volatile Procedure&lt;TEnvironment&gt; activeProcedure;<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span><a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>    public WorkerThread(ThreadGroup group) {<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>      this(group, "PEWorker-");<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>    }<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span><a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>    protected WorkerThread(ThreadGroup group, String prefix) {<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>      super(group, prefix + workerId.incrementAndGet());<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      setDaemon(true);<a name="line.1931"></a>
+<span class="sourceLineNo">1918</span>  @VisibleForTesting<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>  public IdLock getProcExecutionLock() {<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    return procExecutionLock;<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>  }<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span><a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>  // ==========================================================================<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  //  Worker Thread<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>  // ==========================================================================<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>  private class WorkerThread extends StoppableThread {<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>    private volatile Procedure&lt;TEnvironment&gt; activeProcedure;<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span><a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>    public WorkerThread(ThreadGroup group) {<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>      this(group, "PEWorker-");<a name="line.1931"></a>
 <span class="sourceLineNo">1932</span>    }<a name="line.1932"></a>
 <span class="sourceLineNo">1933</span><a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>    @Override<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>    public void sendStopSignal() {<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>      scheduler.signalAll();<a name="line.1936"></a>
+<span class="sourceLineNo">1934</span>    protected WorkerThread(ThreadGroup group, String prefix) {<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      super(group, prefix + workerId.incrementAndGet());<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>      setDaemon(true);<a name="line.1936"></a>
 <span class="sourceLineNo">1937</span>    }<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>    @Override<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>    public void run() {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      try {<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>        while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>          @SuppressWarnings("unchecked")<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>          Procedure&lt;TEnvironment&gt; proc = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>          if (proc == null) {<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>            continue;<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>          }<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>          this.activeProcedure = proc;<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>          int activeCount = activeExecutorCount.incrementAndGet();<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          int runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          LOG.trace("Execute pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>            runningCount, activeCount);<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>          IdLock.Entry lockEntry = procExecutionLock.getLockEntry(proc.getProcId());<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>          try {<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>            executeProcedure(proc);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>          } catch (AssertionError e) {<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>            LOG.info("ASSERT pid=" + proc.getProcId(), e);<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>            throw e;<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>          } finally {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>            procExecutionLock.releaseLockEntry(lockEntry);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>            activeCount = activeExecutorCount.decrementAndGet();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>            runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>            LOG.trace("Halt pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>              runningCount, activeCount);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>            this.activeProcedure = null;<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>            lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>            executionStartTime.set(Long.MAX_VALUE);<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>          }<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>        }<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>      } catch (Throwable t) {<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>        LOG.warn("Worker terminating UNNATURALLY {}", this.activeProcedure, t);<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>      } finally {<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>        LOG.trace("Worker terminated.");<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>      }<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>      workerThreads.remove(this);<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>    }<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span><a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    @Override<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>    public String toString() {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>      Procedure&lt;?&gt; p = this.activeProcedure;<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      return getName() + "(pid=" + (p == null? Procedure.NO_PROC_ID: p.getProcId() + ")");<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span><a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>    /**<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>     * @return the time since the current procedure is running<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>     */<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    public long getCurrentRunTime() {<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    }<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span><a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>    // core worker never timeout<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      return true;<a name="line.1994"></a>
+<span class="sourceLineNo">1938</span><a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>    @Override<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>    public void sendStopSignal() {<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>      scheduler.signalAll();<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    }<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>    @Override<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>    public void run() {<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>      try {<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>        while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>          @SuppressWarnings("unchecked")<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>          Procedure&lt;TEnvironment&gt; proc = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>          if (proc == null) {<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>            continue;<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>          }<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>          this.activeProcedure = proc;<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>          int activeCount = activeExecutorCount.incrementAndGet();<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>          int runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>          LOG.trace("Execute pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>            runningCount, activeCount);<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>          executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>          IdLock.Entry lockEntry = procExecutionLock.getLockEntry(proc.getProcId());<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>          try {<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>            executeProcedure(proc);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>          } catch (AssertionError e) {<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>            LOG.info("ASSERT pid=" + proc.getProcId(), e);<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>            throw e;<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>          } finally {<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>            procExecutionLock.releaseLockEntry(lockEntry);<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>            activeCount = activeExecutorCount.decrementAndGet();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>            runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>            LOG.trace("Halt pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>              runningCount, activeCount);<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>            this.activeProcedure = null;<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>            lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>            executionStartTime.set(Long.MAX_VALUE);<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>          }<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>        }<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>      } catch (Throwable t) {<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>        LOG.warn("Worker terminating UNNATURALLY {}", this.activeProcedure, t);<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>      } finally {<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>        LOG.trace("Worker terminated.");<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>      }<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>      workerThreads.remove(this);<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>    }<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span><a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    @Override<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>    public String toString() {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>      Procedure&lt;?&gt; p = this.activeProcedure;<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      return getName() + "(pid=" + (p == null? Procedure.NO_PROC_ID: p.getProcId() + ")");<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span><a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>    /**<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>     * @return the time since the current procedure is running<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>     */<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    public long getCurrentRunTime() {<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1994"></a>
 <span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>  }<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span><a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>  // A worker thread which can be added when core workers are stuck. Will timeout after<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>  // keepAliveTime if there is no procedure to run.<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>  private final class KeepAliveWorkerThread extends WorkerThread {<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span><a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    public KeepAliveWorkerThread(ThreadGroup group) {<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>      super(group, "KeepAlivePEWorker-");<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    }<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span><a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>    @Override<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>      return EnvironmentEdgeManager.currentTime() - lastUpdate &lt; keepAliveTime;<a name="line.2008"></a>
+<span class="sourceLineNo">1996</span><a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>    // core worker never timeout<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      return true;<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>  }<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span><a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>  // A worker thread which can be added when core workers are stuck. Will timeout after<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>  // keepAliveTime if there is no procedure to run.<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>  private final class KeepAliveWorkerThread extends WorkerThread {<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span><a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    public KeepAliveWorkerThread(ThreadGroup group) {<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>      super(group, "KeepAlivePEWorker-");<a name="line.2008"></a>
 <span class="sourceLineNo">2009</span>    }<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>  }<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span><a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>  // ----------------------------------------------------------------------------<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>  // full set of procedures pending and completed to write a compacted<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  // version of the log (in case is a log)?<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>  // will have the tracker saying everything is in the last log.<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  // ----------------------------------------------------------------------------<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span><a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>  private final class WorkerMonitor extends InlineChore {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.2023"></a>
+<span class="sourceLineNo">2010</span><a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>    @Override<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>      return EnvironmentEdgeManager.currentTime() - lastUpdate &lt; keepAliveTime;<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>    }<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>  }<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span><a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>  // ----------------------------------------------------------------------------<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>  // full set of procedures pending and completed to write a compacted<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  // version of the log (in case is a log)?<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>  // will have the tracker saying everything is in the last log.<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  // ----------------------------------------------------------------------------<a name="line.2023"></a>
 <span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span><a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span><a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span><a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>    public WorkerMonitor() {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>      refreshConfig();<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>    }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span><a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    @Override<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>    public void run() {<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>      final int stuckCount = checkForStuckWorkers();<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>      checkThreadCount(stuckCount);<a name="line.2044"></a>
+<span class="sourceLineNo">2025</span>  private final class WorkerMonitor extends InlineChore {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span><a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span><a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span><a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>    public WorkerMonitor() {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>      refreshConfig();<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>    }<a name="line.2044"></a>
 <span class="sourceLineNo">2045</span><a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>      // refresh interval (poor man dynamic conf update)<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>      refreshConfig();<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    }<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span><a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>    private int checkForStuckWorkers() {<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>      // check if any of the worker is stuck<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>      int stuckCount = 0;<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>      for (WorkerThread worker : workerThreads) {<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>          continue;<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        }<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span><a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // WARN the worker is stuck<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        stuckCount++;<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Worker stuck {}, run time {}", worker,<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>      }<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>      return stuckCount;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>    }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span><a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    private void checkThreadCount(final int stuckCount) {<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      // nothing to do if there are no runnable tasks<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) {<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>        return;<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>      }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>      // add a new thread if the worker stuck percentage exceed the threshold limit<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>      // and every handler is active.<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>      final float stuckPerc = ((float) stuckCount) / workerThreads.size();<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      // let's add new worker thread more aggressively, as they will timeout finally if there is no<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>      // work to do.<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>      if (stuckPerc &gt;= addWorkerStuckPercentage &amp;&amp; workerThreads.size() &lt; maxPoolSize) {<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>        final KeepAliveWorkerThread worker = new KeepAliveWorkerThread(threadGroup);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>        workerThreads.add(worker);<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>        worker.start();<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>        LOG.debug("Added new worker thread {}", worker);<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>      }<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>    }<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span><a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>    private void refreshConfig() {<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      addWorkerStuckPercentage = conf.getFloat(WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY,<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>          DEFAULT_WORKER_ADD_STUCK_PERCENTAGE);<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>      timeoutInterval = conf.getInt(WORKER_MONITOR_INTERVAL_CONF_KEY,<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>        DEFAULT_WORKER_MONITOR_INTERVAL);<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      stuckThreshold = conf.getInt(WORKER_STUCK_THRESHOLD_CONF_KEY,<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>        DEFAULT_WORKER_STUCK_THRESHOLD);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>    }<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span><a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>    @Override<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>    public int getTimeoutInterval() {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>      return timeoutInterval;<a name="line.2096"></a>
+<span class="sourceLineNo">2046</span>    @Override<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>    public void run() {<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>      final int stuckCount = checkForStuckWorkers();<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>      checkThreadCount(stuckCount);<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span><a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>      // refresh interval (poor man dynamic conf update)<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>      refreshConfig();<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>    }<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span><a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>    private int checkForStuckWorkers() {<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>      // check if any of the worker is stuck<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>      int stuckCount = 0;<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>      for (WorkerThread worker : workerThreads) {<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>          continue;<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        }<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span><a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // WARN the worker is stuck<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        stuckCount++;<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Worker stuck {}, run time {}", worker,<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>      return stuckCount;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span><a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>    private void checkThreadCount(final int stuckCount) {<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      // nothing to do if there are no runnable tasks<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) {<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>        return;<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>      }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>      // add a new thread if the worker stuck percentage exceed the threshold limit<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>      // and every handler is active.<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>      final float stuckPerc = ((float) stuckCount) / workerThreads.size();<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      // let's add new worker thread more aggressively, as they will timeout finally if there is no<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>      // work to do.<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>      if (stuckPerc &gt;= addWorkerStuckPercentage &amp;&amp; workerThreads.size() &lt; maxPoolSize) {<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>        final KeepAliveWorkerThread worker = new KeepAliveWorkerThread(threadGroup);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>        workerThreads.add(worker);<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>        worker.start();<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>        LOG.debug("Added new worker thread {}", worker);<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>      }<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>    }<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span><a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>    private void refreshConfig() {<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>      addWorkerStuckPercentage = conf.getFloat(WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY,<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>          DEFAULT_WORKER_ADD_STUCK_PERCENTAGE);<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>      timeoutInterval = conf.getInt(WORKER_MONITOR_INTERVAL_CONF_KEY,<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>        DEFAULT_WORKER_MONITOR_INTERVAL);<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      stuckThreshold = conf.getInt(WORKER_STUCK_THRESHOLD_CONF_KEY,<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>        DEFAULT_WORKER_STUCK_THRESHOLD);<a name="line.2096"></a>
 <span class="sourceLineNo">2097</span>    }<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>  }<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>}<a name="line.2099"></a>
+<span class="sourceLineNo">2098</span><a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>    @Override<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>    public int getTimeoutInterval() {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>      return timeoutInterval;<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>    }<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>  }<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>}<a name="line.2104"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
index 9fd7e0b..fb34e18 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
@@ -1923,188 +1923,193 @@
 <span class="sourceLineNo">1915</span>    return completed.size();<a name="line.1915"></a>
 <span class="sourceLineNo">1916</span>  }<a name="line.1916"></a>
 <span class="sourceLineNo">1917</span><a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>  // ==========================================================================<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  //  Worker Thread<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>  // ==========================================================================<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>  private class WorkerThread extends StoppableThread {<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>    private volatile Procedure&lt;TEnvironment&gt; activeProcedure;<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span><a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>    public WorkerThread(ThreadGroup group) {<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>      this(group, "PEWorker-");<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>    }<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span><a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>    protected WorkerThread(ThreadGroup group, String prefix) {<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>      super(group, prefix + workerId.incrementAndGet());<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      setDaemon(true);<a name="line.1931"></a>
+<span class="sourceLineNo">1918</span>  @VisibleForTesting<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>  public IdLock getProcExecutionLock() {<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    return procExecutionLock;<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>  }<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span><a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>  // ==========================================================================<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  //  Worker Thread<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>  // ==========================================================================<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>  private class WorkerThread extends StoppableThread {<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>    private volatile Procedure&lt;TEnvironment&gt; activeProcedure;<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span><a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>    public WorkerThread(ThreadGroup group) {<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>      this(group, "PEWorker-");<a name="line.1931"></a>
 <span class="sourceLineNo">1932</span>    }<a name="line.1932"></a>
 <span class="sourceLineNo">1933</span><a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>    @Override<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>    public void sendStopSignal() {<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>      scheduler.signalAll();<a name="line.1936"></a>
+<span class="sourceLineNo">1934</span>    protected WorkerThread(ThreadGroup group, String prefix) {<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      super(group, prefix + workerId.incrementAndGet());<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>      setDaemon(true);<a name="line.1936"></a>
 <span class="sourceLineNo">1937</span>    }<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>    @Override<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>    public void run() {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      try {<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>        while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>          @SuppressWarnings("unchecked")<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>          Procedure&lt;TEnvironment&gt; proc = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>          if (proc == null) {<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>            continue;<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>          }<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>          this.activeProcedure = proc;<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>          int activeCount = activeExecutorCount.incrementAndGet();<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          int runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          LOG.trace("Execute pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>            runningCount, activeCount);<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>          IdLock.Entry lockEntry = procExecutionLock.getLockEntry(proc.getProcId());<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>          try {<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>            executeProcedure(proc);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>          } catch (AssertionError e) {<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>            LOG.info("ASSERT pid=" + proc.getProcId(), e);<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>            throw e;<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>          } finally {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>            procExecutionLock.releaseLockEntry(lockEntry);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>            activeCount = activeExecutorCount.decrementAndGet();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>            runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>            LOG.trace("Halt pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>              runningCount, activeCount);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>            this.activeProcedure = null;<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>            lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>            executionStartTime.set(Long.MAX_VALUE);<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>          }<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>        }<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>      } catch (Throwable t) {<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>        LOG.warn("Worker terminating UNNATURALLY {}", this.activeProcedure, t);<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>      } finally {<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>        LOG.trace("Worker terminated.");<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>      }<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>      workerThreads.remove(this);<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>    }<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span><a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    @Override<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>    public String toString() {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>      Procedure&lt;?&gt; p = this.activeProcedure;<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      return getName() + "(pid=" + (p == null? Procedure.NO_PROC_ID: p.getProcId() + ")");<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span><a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>    /**<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>     * @return the time since the current procedure is running<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>     */<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    public long getCurrentRunTime() {<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    }<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span><a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>    // core worker never timeout<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      return true;<a name="line.1994"></a>
+<span class="sourceLineNo">1938</span><a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>    @Override<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>    public void sendStopSignal() {<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>      scheduler.signalAll();<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    }<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>    @Override<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>    public void run() {<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>      try {<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>        while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>          @SuppressWarnings("unchecked")<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>          Procedure&lt;TEnvironment&gt; proc = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>          if (proc == null) {<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>            continue;<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>          }<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>          this.activeProcedure = proc;<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>          int activeCount = activeExecutorCount.incrementAndGet();<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>          int runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>          LOG.trace("Execute pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>            runningCount, activeCount);<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>          executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>          IdLock.Entry lockEntry = procExecutionLock.getLockEntry(proc.getProcId());<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>          try {<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>            executeProcedure(proc);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>          } catch (AssertionError e) {<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>            LOG.info("ASSERT pid=" + proc.getProcId(), e);<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>            throw e;<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>          } finally {<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>            procExecutionLock.releaseLockEntry(lockEntry);<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>            activeCount = activeExecutorCount.decrementAndGet();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>            runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>            LOG.trace("Halt pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>              runningCount, activeCount);<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>            this.activeProcedure = null;<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>            lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>            executionStartTime.set(Long.MAX_VALUE);<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>          }<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>        }<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>      } catch (Throwable t) {<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>        LOG.warn("Worker terminating UNNATURALLY {}", this.activeProcedure, t);<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>      } finally {<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>        LOG.trace("Worker terminated.");<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>      }<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>      workerThreads.remove(this);<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>    }<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span><a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    @Override<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>    public String toString() {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>      Procedure&lt;?&gt; p = this.activeProcedure;<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      return getName() + "(pid=" + (p == null? Procedure.NO_PROC_ID: p.getProcId() + ")");<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span><a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>    /**<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>     * @return the time since the current procedure is running<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>     */<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    public long getCurrentRunTime() {<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1994"></a>
 <span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>  }<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span><a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>  // A worker thread which can be added when core workers are stuck. Will timeout after<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>  // keepAliveTime if there is no procedure to run.<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>  private final class KeepAliveWorkerThread extends WorkerThread {<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span><a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    public KeepAliveWorkerThread(ThreadGroup group) {<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>      super(group, "KeepAlivePEWorker-");<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    }<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span><a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>    @Override<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>      return EnvironmentEdgeManager.currentTime() - lastUpdate &lt; keepAliveTime;<a name="line.2008"></a>
+<span class="sourceLineNo">1996</span><a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>    // core worker never timeout<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      return true;<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>  }<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span><a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>  // A worker thread which can be added when core workers are stuck. Will timeout after<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>  // keepAliveTime if there is no procedure to run.<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>  private final class KeepAliveWorkerThread extends WorkerThread {<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span><a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    public KeepAliveWorkerThread(ThreadGroup group) {<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>      super(group, "KeepAlivePEWorker-");<a name="line.2008"></a>
 <span class="sourceLineNo">2009</span>    }<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>  }<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span><a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>  // ----------------------------------------------------------------------------<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>  // full set of procedures pending and completed to write a compacted<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  // version of the log (in case is a log)?<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>  // will have the tracker saying everything is in the last log.<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  // ----------------------------------------------------------------------------<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span><a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>  private final class WorkerMonitor extends InlineChore {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.2023"></a>
+<span class="sourceLineNo">2010</span><a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>    @Override<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>      return EnvironmentEdgeManager.currentTime() - lastUpdate &lt; keepAliveTime;<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>    }<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>  }<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span><a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>  // ----------------------------------------------------------------------------<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>  // full set of procedures pending and completed to write a compacted<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  // version of the log (in case is a log)?<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>  // will have the tracker saying everything is in the last log.<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  // ----------------------------------------------------------------------------<a name="line.2023"></a>
 <span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span><a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span><a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span><a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>    public WorkerMonitor() {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>      refreshConfig();<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>    }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span><a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    @Override<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>    public void run() {<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>      final int stuckCount = checkForStuckWorkers();<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>      checkThreadCount(stuckCount);<a name="line.2044"></a>
+<span class="sourceLineNo">2025</span>  private final class WorkerMonitor extends InlineChore {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span><a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span><a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span><a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>    public WorkerMonitor() {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>      refreshConfig();<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>    }<a name="line.2044"></a>
 <span class="sourceLineNo">2045</span><a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>      // refresh interval (poor man dynamic conf update)<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>      refreshConfig();<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    }<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span><a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>    private int checkForStuckWorkers() {<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>      // check if any of the worker is stuck<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>      int stuckCount = 0;<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>      for (WorkerThread worker : workerThreads) {<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>          continue;<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        }<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span><a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // WARN the worker is stuck<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        stuckCount++;<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Worker stuck {}, run time {}", worker,<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>      }<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>      return stuckCount;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>    }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span><a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    private void checkThreadCount(final int stuckCount) {<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      // nothing to do if there are no runnable tasks<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) {<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>        return;<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>      }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>      // add a new thread if the worker stuck percentage exceed the threshold limit<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>      // and every handler is active.<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>      final float stuckPerc = ((float) stuckCount) / workerThreads.size();<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      // let's add new worker thread more aggressively, as they will timeout finally if there is no<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>      // work to do.<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>      if (stuckPerc &gt;= addWorkerStuckPercentage &amp;&amp; workerThreads.size() &lt; maxPoolSize) {<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>        final KeepAliveWorkerThread worker = new KeepAliveWorkerThread(threadGroup);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>        workerThreads.add(worker);<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>        worker.start();<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>        LOG.debug("Added new worker thread {}", worker);<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>      }<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>    }<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span><a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>    private void refreshConfig() {<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      addWorkerStuckPercentage = conf.getFloat(WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY,<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>          DEFAULT_WORKER_ADD_STUCK_PERCENTAGE);<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>      timeoutInterval = conf.getInt(WORKER_MONITOR_INTERVAL_CONF_KEY,<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>        DEFAULT_WORKER_MONITOR_INTERVAL);<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      stuckThreshold = conf.getInt(WORKER_STUCK_THRESHOLD_CONF_KEY,<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>        DEFAULT_WORKER_STUCK_THRESHOLD);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>    }<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span><a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>    @Override<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>    public int getTimeoutInterval() {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>      return timeoutInterval;<a name="line.2096"></a>
+<span class="sourceLineNo">2046</span>    @Override<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>    public void run() {<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>      final int stuckCount = checkForStuckWorkers();<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>      checkThreadCount(stuckCount);<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span><a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>      // refresh interval (poor man dynamic conf update)<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>      refreshConfig();<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>    }<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span><a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>    private int checkForStuckWorkers() {<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>      // check if any of the worker is stuck<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>      int stuckCount = 0;<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>      for (WorkerThread worker : workerThreads) {<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>          continue;<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        }<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span><a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // WARN the worker is stuck<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        stuckCount++;<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Worker stuck {}, run time {}", worker,<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>      return stuckCount;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span><a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>    private void checkThreadCount(final int stuckCount) {<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      // nothing to do if there are no runnable tasks<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) {<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>        return;<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>      }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>      // add a new thread if the worker stuck percentage exceed the threshold limit<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>      // and every handler is active.<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>      final float stuckPerc = ((float) stuckCount) / workerThreads.size();<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      // let's add new worker thread more aggressively, as they will timeout finally if there is no<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>      // work to do.<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>      if (stuckPerc &gt;= addWorkerStuckPercentage &amp;&amp; workerThreads.size() &lt; maxPoolSize) {<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>        final KeepAliveWorkerThread worker = new KeepAliveWorkerThread(threadGroup);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>        workerThreads.add(worker);<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>        worker.start();<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>        LOG.debug("Added new worker thread {}", worker);<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>      }<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>    }<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span><a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>    private void refreshConfig() {<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>      addWorkerStuckPercentage = conf.getFloat(WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY,<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>          DEFAULT_WORKER_ADD_STUCK_PERCENTAGE);<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>      timeoutInterval = conf.getInt(WORKER_MONITOR_INTERVAL_CONF_KEY,<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>        DEFAULT_WORKER_MONITOR_INTERVAL);<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      stuckThreshold = conf.getInt(WORKER_STUCK_THRESHOLD_CONF_KEY,<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>        DEFAULT_WORKER_STUCK_THRESHOLD);<a name="line.2096"></a>
 <span class="sourceLineNo">2097</span>    }<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>  }<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>}<a name="line.2099"></a>
+<span class="sourceLineNo">2098</span><a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>    @Override<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>    public int getTimeoutInterval() {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>      return timeoutInterval;<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>    }<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>  }<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>}<a name="line.2104"></a>
 
 
 


[24/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index 866b214..f5b78d2 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -25,8 +25,8 @@ under the License.
     <language>en-us</language>
     <copyright>&#169;2007 - 2018 The Apache Software Foundation</copyright>
     <item>
-      <title>File: 3804,
-             Errors: 15075,
+      <title>File: 3805,
+             Errors: 15073,
              Warnings: 0,
              Infos: 0
       </title>
@@ -11577,7 +11577,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  4
+                  3
                 </td>
               </tr>
                           <tr>
@@ -18451,7 +18451,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  12
+                  11
                 </td>
               </tr>
                           <tr>
@@ -33170,6 +33170,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.TestReportOnlineRegionsRace.java">org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.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.replication.master.TestRecoverStandbyProcedure.java">org/apache/hadoop/hbase/replication/master/TestRecoverStandbyProcedure.java</a>
                 </td>
                 <td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index fcf3c69..fedeef6 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index d764276..702dc03 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index fc5b155..5766010 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index e10e261..39a77c2 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index d3dadcc..61c92ea 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="20181112" />
+    <meta name="Date-Revision-yyyymmdd" content="20181113" />
     <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-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 33a77d9..72e3bd6 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>"Mon Nov 12 14:44:31 UTC 2018"</code></td>
+<td class="colLast"><code>"Tue Nov 13 14:43:38 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>"6c835d6f0c60e33b7010c2644f3d93c2"</code></td>
+<td class="colLast"><code>"55a6c0a68f033730bffcb68c308d426e"</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/b9b09fec/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 1e52f7d..ddf4124 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -10883,8 +10883,6 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#checkOnlineRegionsReport-org.apache.hadoop.hbase.master.assignment.ServerStateNode-java.util.Set-">checkOnlineRegionsReport(ServerStateNode, Set&lt;byte[]&gt;)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#checkOnlineRegionsReportForMeta-org.apache.hadoop.hbase.master.assignment.ServerStateNode-java.util.Set-">checkOnlineRegionsReportForMeta(ServerStateNode, Set&lt;byte[]&gt;)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html#checkOnlineServersOnly-java.util.Set-">checkOnlineServersOnly(Set&lt;Address&gt;)</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupAdminServer</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/InternalScan.html#checkOnlyMemStore--">checkOnlyMemStore()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/InternalScan.html" title="class in org.apache.hadoop.hbase.regionserver">InternalScan</a></dt>
@@ -27638,11 +27636,11 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#EnableTableProcedure--">EnableTableProcedure()</a></span> - Constructor for class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">EnableTableProcedure</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#EnableTableProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-boolean-">EnableTableProcedure(MasterProcedureEnv, TableName, boolean)</a></span> - Constructor for class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">EnableTableProcedure</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#EnableTableProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-">EnableTableProcedure(MasterProcedureEnv, TableName)</a></span> - Constructor for class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">EnableTableProcedure</a></dt>
 <dd>
 <div class="block">Constructor</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#EnableTableProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-boolean-org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch-">EnableTableProcedure(MasterProcedureEnv, TableName, boolean, ProcedurePrepareLatch)</a></span> - Constructor for class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">EnableTableProcedure</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#EnableTableProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch-">EnableTableProcedure(MasterProcedureEnv, TableName, ProcedurePrepareLatch)</a></span> - Constructor for class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">EnableTableProcedure</a></dt>
 <dd>
 <div class="block">Constructor</div>
 </dd>
@@ -46314,6 +46312,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/JSONMetricUtil.html#getProcessPID--">getProcessPID()</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/JSONMetricUtil.html" title="class in org.apache.hadoop.hbase.util">JSONMetricUtil</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#getProcExecutionLock--">getProcExecutionLock()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/MasterProcedureUtil.NonceProcedureRunnable.html#getProcId--">getProcId()</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/MasterProcedureUtil.NonceProcedureRunnable.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureUtil.NonceProcedureRunnable</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId--">getProcId()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></dt>
@@ -66797,8 +66797,6 @@
 <dd>
 <div class="block">Kill one back up ZK servers.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#killRegionServer-org.apache.hadoop.hbase.master.assignment.ServerStateNode-">killRegionServer(ServerStateNode)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/AnnotationReadingPriorityFunction.html#knownArgumentClasses">knownArgumentClasses</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/AnnotationReadingPriorityFunction.html" title="class in org.apache.hadoop.hbase.regionserver">AnnotationReadingPriorityFunction</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/Import.CellWritableComparable.html#kv">kv</a></span> - Variable in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/Import.CellWritableComparable.html" title="class in org.apache.hadoop.hbase.mapreduce">Import.CellWritableComparable</a></dt>
@@ -94591,7 +94589,7 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#reportOnlineRegions-org.apache.hadoop.hbase.ServerName-java.util.Set-">reportOnlineRegions(ServerName, Set&lt;byte[]&gt;)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a></dt>
 <dd>
-<div class="block">the master will call this method when the RS send the regionServerReport().</div>
+<div class="block">The master will call this method when the RS send the regionServerReport().</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/ServerNonceManager.html#reportOperationFromWal-long-long-long-">reportOperationFromWal(long, long, long)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/ServerNonceManager.html" title="class in org.apache.hadoop.hbase.regionserver">ServerNonceManager</a></dt>
 <dd>
@@ -107845,8 +107843,6 @@ service.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.html#skipTableStateCheck">skipTableStateCheck</a></span> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">DisableTableProcedure</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#skipTableStateCheck">skipTableStateCheck</a></span> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">EnableTableProcedure</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/OrderedBytes.html#skipVaruint64-org.apache.hadoop.hbase.util.PositionedByteRange-boolean-">skipVaruint64(PositionedByteRange, boolean)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/OrderedBytes.html" title="class in org.apache.hadoop.hbase.util">OrderedBytes</a></dt>
 <dd>
 <div class="block">Skip <code>src</code> over the encoded varuint64.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 38f7cc7..f7aa217 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -167,10 +167,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.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html b/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
index 77ee94f..47e6433 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
@@ -4464,7 +4464,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#reportOnlineRegions-org.apache.hadoop.hbase.ServerName-java.util.Set-">reportOnlineRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                    <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt;&nbsp;regionNames)</code>
-<div class="block">the master will call this method when the RS send the regionServerReport().</div>
+<div class="block">The master will call this method when the RS send the regionServerReport().</div>
 </td>
 </tr>
 <tr class="altColor">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html b/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
index 41d62e3..3065dad 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
@@ -7606,16 +7606,14 @@ service.</div>
 </td>
 </tr>
 <tr class="altColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#EnableTableProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-boolean-">EnableTableProcedure</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
-                    <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
-                    boolean&nbsp;skipTableStateCheck)</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#EnableTableProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-">EnableTableProcedure</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+                    <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Constructor</div>
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#EnableTableProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-boolean-org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch-">EnableTableProcedure</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html#EnableTableProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch-">EnableTableProcedure</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                     <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
-                    boolean&nbsp;skipTableStateCheck,
                     <a href="../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a>&nbsp;syncLatch)</code>
 <div class="block">Constructor</div>
 </td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/org/apache/hadoop/hbase/class-use/YouAreDeadException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/YouAreDeadException.html b/devapidocs/org/apache/hadoop/hbase/class-use/YouAreDeadException.html
index ed5f09d..b3f878a 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/YouAreDeadException.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/YouAreDeadException.html
@@ -86,10 +86,6 @@
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.master">org.apache.hadoop.hbase.master</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.master.assignment">org.apache.hadoop.hbase.master.assignment</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
 </tbody>
 </table>
 </li>
@@ -121,27 +117,6 @@
 </tbody>
 </table>
 </li>
-<li class="blockList"><a name="org.apache.hadoop.hbase.master.assignment">
-<!--   -->
-</a>
-<h3>Uses of <a href="../../../../../org/apache/hadoop/hbase/YouAreDeadException.html" title="class in org.apache.hadoop.hbase">YouAreDeadException</a> in <a href="../../../../../org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a></h3>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
-<caption><span>Methods in <a href="../../../../../org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a> that throw <a href="../../../../../org/apache/hadoop/hbase/YouAreDeadException.html" title="class in org.apache.hadoop.hbase">YouAreDeadException</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#reportOnlineRegions-org.apache.hadoop.hbase.ServerName-java.util.Set-">reportOnlineRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
-                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt;&nbsp;regionNames)</code>
-<div class="block">the master will call this method when the RS send the regionServerReport().</div>
-</td>
-</tr>
-</tbody>
-</table>
-</li>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
index e67b778..329f62f 100644
--- a/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
@@ -201,8 +201,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MetaTableMetrics.MetaTableOps.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">MetaTableMetrics.MetaTableOps</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/RegionObserver.MutationType.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">RegionObserver.MutationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MetaTableMetrics.MetaTableOps.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">MetaTableMetrics.MetaTableOps</span></a></li>
 </ul>
 </li>
 </ul>

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

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

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

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
index 832dd6a..dfe1424 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1121">AssignmentManager.RegionInTransitionChore</a>
+<pre>private static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1079">AssignmentManager.RegionInTransitionChore</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureInMemoryChore.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureInMemoryChore</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt;</pre>
 </li>
 </ul>
@@ -240,7 +240,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureI
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RegionInTransitionChore</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html#line.1122">RegionInTransitionChore</a>(int&nbsp;timeoutMsec)</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html#line.1080">RegionInTransitionChore</a>(int&nbsp;timeoutMsec)</pre>
 </li>
 </ul>
 </li>
@@ -257,7 +257,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureI
 <ul class="blockListLast">
 <li class="blockList">
 <h4>periodicExecute</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html#line.1127">periodicExecute</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html#line.1085">periodicExecute</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureInMemoryChore.html#periodicExecute-TEnvironment-">periodicExecute</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureInMemoryChore.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureInMemoryChore</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt;</code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
index e1159e1..da38966 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1148">AssignmentManager.RegionInTransitionStat</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1106">AssignmentManager.RegionInTransitionStat</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -266,7 +266,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>ritThreshold</h4>
-<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1149">ritThreshold</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1107">ritThreshold</a></pre>
 </li>
 </ul>
 <a name="ritsOverThreshold">
@@ -275,7 +275,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>ritsOverThreshold</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1151">ritsOverThreshold</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1109">ritsOverThreshold</a></pre>
 </li>
 </ul>
 <a name="statTimestamp">
@@ -284,7 +284,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>statTimestamp</h4>
-<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1152">statTimestamp</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1110">statTimestamp</a></pre>
 </li>
 </ul>
 <a name="oldestRITTime">
@@ -293,7 +293,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>oldestRITTime</h4>
-<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1153">oldestRITTime</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1111">oldestRITTime</a></pre>
 </li>
 </ul>
 <a name="totalRITsTwiceThreshold">
@@ -302,7 +302,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>totalRITsTwiceThreshold</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1154">totalRITsTwiceThreshold</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1112">totalRITsTwiceThreshold</a></pre>
 </li>
 </ul>
 <a name="totalRITs">
@@ -311,7 +311,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>totalRITs</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1155">totalRITs</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1113">totalRITs</a></pre>
 </li>
 </ul>
 </li>
@@ -328,7 +328,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RegionInTransitionStat</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1158">RegionInTransitionStat</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1116">RegionInTransitionStat</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
 </li>
@@ -345,7 +345,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRITThreshold</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1163">getRITThreshold</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1121">getRITThreshold</a>()</pre>
 </li>
 </ul>
 <a name="getTimestamp--">
@@ -354,7 +354,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTimestamp</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1167">getTimestamp</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1125">getTimestamp</a>()</pre>
 </li>
 </ul>
 <a name="getTotalRITs--">
@@ -363,7 +363,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalRITs</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1171">getTotalRITs</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1129">getTotalRITs</a>()</pre>
 </li>
 </ul>
 <a name="getOldestRITTime--">
@@ -372,7 +372,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getOldestRITTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1175">getOldestRITTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1133">getOldestRITTime</a>()</pre>
 </li>
 </ul>
 <a name="getTotalRITsOverThreshold--">
@@ -381,7 +381,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalRITsOverThreshold</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1179">getTotalRITsOverThreshold</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1137">getTotalRITsOverThreshold</a>()</pre>
 </li>
 </ul>
 <a name="hasRegionsTwiceOverThreshold--">
@@ -390,7 +390,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hasRegionsTwiceOverThreshold</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1184">hasRegionsTwiceOverThreshold</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1142">hasRegionsTwiceOverThreshold</a>()</pre>
 </li>
 </ul>
 <a name="hasRegionsOverThreshold--">
@@ -399,7 +399,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hasRegionsOverThreshold</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1188">hasRegionsOverThreshold</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1146">hasRegionsOverThreshold</a>()</pre>
 </li>
 </ul>
 <a name="getRegionOverThreshold--">
@@ -408,7 +408,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionOverThreshold</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1193">getRegionOverThreshold</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1151">getRegionOverThreshold</a>()</pre>
 </li>
 </ul>
 <a name="isRegionOverThreshold-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -417,7 +417,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isRegionOverThreshold</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1198">isRegionOverThreshold</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1156">isRegionOverThreshold</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 </li>
 </ul>
 <a name="isRegionTwiceOverThreshold-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -426,7 +426,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isRegionTwiceOverThreshold</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1203">isRegionTwiceOverThreshold</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1161">isRegionTwiceOverThreshold</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 </li>
 </ul>
 <a name="update-org.apache.hadoop.hbase.master.assignment.AssignmentManager-">
@@ -435,7 +435,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>update</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1211">update</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a>&nbsp;am)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1169">update</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a>&nbsp;am)</pre>
 </li>
 </ul>
 <a name="update-java.util.Collection-long-">
@@ -444,7 +444,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>update</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1218">update</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;regions,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1176">update</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;regions,
                     long&nbsp;currentTime)</pre>
 </li>
 </ul>


[11/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html
index 98ef11a..ab175b6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html
@@ -256,1168 +256,1169 @@
 <span class="sourceLineNo">248</span>    this.leaseRecovery = leaseRecovery;<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    this.walDir = walDir;<a name="line.249"></a>
 <span class="sourceLineNo">250</span>    this.walArchiveDir = walArchiveDir;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    this.fs = walDir.getFileSystem(conf);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    this.enforceStreamCapability = conf.getBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE, true);<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>    // Create the log directory for the procedure store<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    if (!fs.exists(walDir)) {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      if (!fs.mkdirs(walDir)) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        throw new IOException("Unable to mkdir " + walDir);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    // Now that it exists, set the log policy<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    String storagePolicy =<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        conf.get(HConstants.WAL_STORAGE_POLICY, HConstants.DEFAULT_WAL_STORAGE_POLICY);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    CommonFSUtils.setStoragePolicy(fs, walDir, storagePolicy);<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>    // Create archive dir up front. Rename won't work w/o it up on HDFS.<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    if (this.walArchiveDir != null &amp;&amp; !this.fs.exists(this.walArchiveDir)) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      if (this.fs.mkdirs(this.walArchiveDir)) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        LOG.debug("Created Procedure Store WAL archive dir {}", this.walArchiveDir);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      } else {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        LOG.warn("Failed create of {}", this.walArchiveDir);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      }<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>  @Override<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public void start(int numSlots) throws IOException {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    if (!setRunning(true)) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      return;<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>    // Init buffer slots<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    loading.set(true);<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    runningProcCount = numSlots;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    syncMaxSlot = numSlots;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    slots = new ByteSlot[numSlots];<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    slotsCache = new LinkedTransferQueue&lt;&gt;();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    while (slotsCache.size() &lt; numSlots) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      slotsCache.offer(new ByteSlot());<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>    // Tunings<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    walCountWarnThreshold =<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      conf.getInt(WAL_COUNT_WARN_THRESHOLD_CONF_KEY, DEFAULT_WAL_COUNT_WARN_THRESHOLD);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    maxRetriesBeforeRoll =<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      conf.getInt(MAX_RETRIES_BEFORE_ROLL_CONF_KEY, DEFAULT_MAX_RETRIES_BEFORE_ROLL);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    maxSyncFailureRoll = conf.getInt(MAX_SYNC_FAILURE_ROLL_CONF_KEY, DEFAULT_MAX_SYNC_FAILURE_ROLL);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    waitBeforeRoll = conf.getInt(WAIT_BEFORE_ROLL_CONF_KEY, DEFAULT_WAIT_BEFORE_ROLL);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    rollRetries = conf.getInt(ROLL_RETRIES_CONF_KEY, DEFAULT_ROLL_RETRIES);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    rollThreshold = conf.getLong(ROLL_THRESHOLD_CONF_KEY, DEFAULT_ROLL_THRESHOLD);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    periodicRollMsec = conf.getInt(PERIODIC_ROLL_CONF_KEY, DEFAULT_PERIODIC_ROLL);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    syncWaitMsec = conf.getInt(SYNC_WAIT_MSEC_CONF_KEY, DEFAULT_SYNC_WAIT_MSEC);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    useHsync = conf.getBoolean(USE_HSYNC_CONF_KEY, DEFAULT_USE_HSYNC);<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span>    // WebUI<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    syncMetricsQueue = new CircularFifoQueue&lt;&gt;(<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      conf.getInt(STORE_WAL_SYNC_STATS_COUNT, DEFAULT_SYNC_STATS_COUNT));<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>    // Init sync thread<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    syncThread = new Thread("WALProcedureStoreSyncThread") {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      @Override<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      public void run() {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>        try {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>          syncLoop();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>        } catch (Throwable e) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>          LOG.error("Got an exception from the sync-loop", e);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          if (!isSyncAborted()) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>            sendAbortProcessSignal();<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      }<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    };<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    syncThread.start();<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  @Override<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  public void stop(final boolean abort) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    if (!setRunning(false)) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      return;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    }<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>    LOG.info("Stopping the WAL Procedure Store, isAbort=" + abort +<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      (isSyncAborted() ? " (self aborting)" : ""));<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    sendStopSignal();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    if (!isSyncAborted()) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      try {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        while (syncThread.isAlive()) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>          sendStopSignal();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>          syncThread.join(250);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      } catch (InterruptedException e) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        LOG.warn("join interrupted", e);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        Thread.currentThread().interrupt();<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>    // Close the writer<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    closeCurrentLogStream(abort);<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    // Close the old logs<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    // they should be already closed, this is just in case the load fails<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    // and we call start() and then stop()<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    for (ProcedureWALFile log: logs) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      log.close();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    logs.clear();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    loading.set(true);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  private void sendStopSignal() {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    if (lock.tryLock()) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      try {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        waitCond.signalAll();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        syncCond.signalAll();<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      } finally {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        lock.unlock();<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      }<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  }<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>  @Override<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  public int getNumThreads() {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    return slots == null ? 0 : slots.length;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>  @Override<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  public int setRunningProcedureCount(final int count) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    this.runningProcCount = count &gt; 0 ? Math.min(count, slots.length) : slots.length;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    return this.runningProcCount;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>  public ProcedureStoreTracker getStoreTracker() {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    return storeTracker;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  }<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>  public ArrayList&lt;ProcedureWALFile&gt; getActiveLogs() {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    lock.lock();<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      return new ArrayList&lt;&gt;(logs);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    } finally {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      lock.unlock();<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    }<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>  public Set&lt;ProcedureWALFile&gt; getCorruptedLogs() {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    return corruptedLogs;<a name="line.395"></a>
-<span class="sourceLineNo">396</span>  }<a name="line.396"></a>
-<span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span>  @Override<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  public void recoverLease() throws IOException {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    lock.lock();<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    try {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      LOG.debug("Starting WAL Procedure Store lease recovery");<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      boolean afterFirstAttempt = false;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      while (isRunning()) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        // Don't sleep before first attempt<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        if (afterFirstAttempt) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>          LOG.trace("Sleep {} ms after first lease recovery attempt.",<a name="line.407"></a>
-<span class="sourceLineNo">408</span>              waitBeforeRoll);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          Threads.sleepWithoutInterrupt(waitBeforeRoll);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>        } else {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>          afterFirstAttempt = true;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        FileStatus[] oldLogs = getLogFiles();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        // Get Log-MaxID and recover lease on old logs<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        try {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>          flushLogId = initOldLogs(oldLogs);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        } catch (FileNotFoundException e) {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>          LOG.warn("Someone else is active and deleted logs. retrying.", e);<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          continue;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>        // Create new state-log<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        if (!rollWriter(flushLogId + 1)) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          // someone else has already created this log<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          LOG.debug("Someone else has already created log {}. Retrying.", flushLogId);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>          continue;<a name="line.426"></a>
-<span class="sourceLineNo">427</span>        }<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>        // We have the lease on the log<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        oldLogs = getLogFiles();<a name="line.430"></a>
-<span class="sourceLineNo">431</span>        if (getMaxLogId(oldLogs) &gt; flushLogId) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>          LOG.debug("Someone else created new logs. Expected maxLogId &lt; {}", flushLogId);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>          logs.getLast().removeFile(this.walArchiveDir);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          continue;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>        }<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>        LOG.debug("Lease acquired for flushLogId={}", flushLogId);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        break;<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      }<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    } finally {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      lock.unlock();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  }<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>  @Override<a name="line.445"></a>
-<span class="sourceLineNo">446</span>  public void load(ProcedureLoader loader) throws IOException {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    lock.lock();<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    try {<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      if (logs.isEmpty()) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        throw new RuntimeException("recoverLease() must be called before loading data");<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      }<a name="line.451"></a>
-<span class="sourceLineNo">452</span><a name="line.452"></a>
-<span class="sourceLineNo">453</span>      // Nothing to do, If we have only the current log.<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      if (logs.size() == 1) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        LOG.debug("No state logs to replay.");<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        loader.setMaxProcId(0);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        return;<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // Load the old logs<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      Iterator&lt;ProcedureWALFile&gt; it = logs.descendingIterator();<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      it.next(); // Skip the current log<a name="line.462"></a>
-<span class="sourceLineNo">463</span><a name="line.463"></a>
-<span class="sourceLineNo">464</span>      ProcedureWALFormat.load(it, storeTracker, new ProcedureWALFormat.Loader() {<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>        @Override<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        public void setMaxProcId(long maxProcId) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>          loader.setMaxProcId(maxProcId);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>        }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>        @Override<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        public void load(ProcedureIterator procIter) throws IOException {<a name="line.472"></a>
-<span class="sourceLineNo">473</span>          loader.load(procIter);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        }<a name="line.474"></a>
-<span class="sourceLineNo">475</span><a name="line.475"></a>
-<span class="sourceLineNo">476</span>        @Override<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>          loader.handleCorrupted(procIter);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        }<a name="line.479"></a>
-<span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span>        @Override<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        public void markCorruptedWAL(ProcedureWALFile log, IOException e) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>          if (corruptedLogs == null) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>            corruptedLogs = new HashSet&lt;&gt;();<a name="line.484"></a>
-<span class="sourceLineNo">485</span>          }<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          corruptedLogs.add(log);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>          // TODO: sideline corrupted log<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      });<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    } finally {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      try {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        // try to cleanup inactive wals and complete the operation<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        buildHoldingCleanupTracker();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        tryCleanupLogsOnLoad();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        loading.set(false);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      } finally {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>        lock.unlock();<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    }<a name="line.499"></a>
-<span class="sourceLineNo">500</span>  }<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>  private void tryCleanupLogsOnLoad() {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    // nothing to cleanup.<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    if (logs.size() &lt;= 1) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      return;<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span>    // the config says to not cleanup wals on load.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    if (!conf.getBoolean(EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY,<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY)) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      LOG.debug("WALs cleanup on load is not enabled: " + getActiveLogs());<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      return;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    }<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>    try {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      periodicRoll();<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    } catch (IOException e) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      LOG.warn("Unable to cleanup logs on load: " + e.getMessage(), e);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    }<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>  @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span>  public void insert(Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (LOG.isTraceEnabled()) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.trace("Insert " + proc + ", subproc=" + Arrays.toString(subprocs));<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>    ByteSlot slot = acquireSlot();<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    try {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      // Serialize the insert<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      long[] subProcIds = null;<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      if (subprocs != null) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        ProcedureWALFormat.writeInsert(slot, proc, subprocs);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        subProcIds = new long[subprocs.length];<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          subProcIds[i] = subprocs[i].getProcId();<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        }<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      } else {<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        assert !proc.hasParent();<a name="line.539"></a>
-<span class="sourceLineNo">540</span>        ProcedureWALFormat.writeInsert(slot, proc);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>      // Push the transaction data and wait until it is persisted<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      pushData(PushType.INSERT, slot, proc.getProcId(), subProcIds);<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    } catch (IOException e) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      // We are not able to serialize the procedure.<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      // this is a code error, and we are not able to go on.<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: proc=" +<a name="line.548"></a>
-<span class="sourceLineNo">549</span>          proc + ", subprocs=" + Arrays.toString(subprocs), e);<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      throw new RuntimeException(e);<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    } finally {<a name="line.551"></a>
-<span class="sourceLineNo">552</span>      releaseSlot(slot);<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>  @Override<a name="line.556"></a>
-<span class="sourceLineNo">557</span>  public void insert(Procedure&lt;?&gt;[] procs) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    if (LOG.isTraceEnabled()) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      LOG.trace("Insert " + Arrays.toString(procs));<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
-<span class="sourceLineNo">561</span><a name="line.561"></a>
-<span class="sourceLineNo">562</span>    ByteSlot slot = acquireSlot();<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    try {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      // Serialize the insert<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      long[] procIds = new long[procs.length];<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>        assert !procs[i].hasParent();<a name="line.567"></a>
-<span class="sourceLineNo">568</span>        procIds[i] = procs[i].getProcId();<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        ProcedureWALFormat.writeInsert(slot, procs[i]);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>      // Push the transaction data and wait until it is persisted<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      pushData(PushType.INSERT, slot, Procedure.NO_PROC_ID, procIds);<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    } catch (IOException e) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      // We are not able to serialize the procedure.<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      // this is a code error, and we are not able to go on.<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: " +<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          Arrays.toString(procs), e);<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      throw new RuntimeException(e);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    } finally {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      releaseSlot(slot);<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    }<a name="line.582"></a>
-<span class="sourceLineNo">583</span>  }<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>  @Override<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  public void update(Procedure&lt;?&gt; proc) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    if (LOG.isTraceEnabled()) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>      LOG.trace("Update " + proc);<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    }<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span>    ByteSlot slot = acquireSlot();<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    try {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      // Serialize the update<a name="line.593"></a>
-<span class="sourceLineNo">594</span>      ProcedureWALFormat.writeUpdate(slot, proc);<a name="line.594"></a>
-<span class="sourceLineNo">595</span><a name="line.595"></a>
-<span class="sourceLineNo">596</span>      // Push the transaction data and wait until it is persisted<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      pushData(PushType.UPDATE, slot, proc.getProcId(), null);<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    } catch (IOException e) {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      // We are not able to serialize the procedure.<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      // this is a code error, and we are not able to go on.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      throw new RuntimeException(e);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    } finally {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      releaseSlot(slot);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>  }<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span>  @Override<a name="line.608"></a>
-<span class="sourceLineNo">609</span>  public void delete(long procId) {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    LOG.trace("Delete {}", procId);<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    ByteSlot slot = acquireSlot();<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    try {<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      // Serialize the delete<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      ProcedureWALFormat.writeDelete(slot, procId);<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>      // Push the transaction data and wait until it is persisted<a name="line.616"></a>
-<span class="sourceLineNo">617</span>      pushData(PushType.DELETE, slot, procId, null);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    } catch (IOException e) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      // We are not able to serialize the procedure.<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      // this is a code error, and we are not able to go on.<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + procId, e);<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      throw new RuntimeException(e);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    } finally {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>      releaseSlot(slot);<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    }<a name="line.625"></a>
-<span class="sourceLineNo">626</span>  }<a name="line.626"></a>
-<span class="sourceLineNo">627</span><a name="line.627"></a>
-<span class="sourceLineNo">628</span>  @Override<a name="line.628"></a>
-<span class="sourceLineNo">629</span>  public void delete(Procedure&lt;?&gt; proc, long[] subProcIds) {<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    assert proc != null : "expected a non-null procedure";<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    assert subProcIds != null &amp;&amp; subProcIds.length &gt; 0 : "expected subProcIds";<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    if (LOG.isTraceEnabled()) {<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      LOG.trace("Update " + proc + " and Delete " + Arrays.toString(subProcIds));<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    }<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>    ByteSlot slot = acquireSlot();<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    try {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      // Serialize the delete<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      ProcedureWALFormat.writeDelete(slot, proc, subProcIds);<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span>      // Push the transaction data and wait until it is persisted<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      pushData(PushType.DELETE, slot, proc.getProcId(), subProcIds);<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    } catch (IOException e) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      // We are not able to serialize the procedure.<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      // this is a code error, and we are not able to go on.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      throw new RuntimeException(e);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    } finally {<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      releaseSlot(slot);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    }<a name="line.650"></a>
-<span class="sourceLineNo">651</span>  }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>  @Override<a name="line.653"></a>
-<span class="sourceLineNo">654</span>  public void delete(final long[] procIds, final int offset, final int count) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    if (count == 0) return;<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    if (offset == 0 &amp;&amp; count == procIds.length) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      delete(procIds);<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    } else if (count == 1) {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>      delete(procIds[offset]);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    } else {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      delete(Arrays.copyOfRange(procIds, offset, offset + count));<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    }<a name="line.662"></a>
-<span class="sourceLineNo">663</span>  }<a name="line.663"></a>
-<span class="sourceLineNo">664</span><a name="line.664"></a>
-<span class="sourceLineNo">665</span>  private void delete(long[] procIds) {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    if (LOG.isTraceEnabled()) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      LOG.trace("Delete " + Arrays.toString(procIds));<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>    final ByteSlot slot = acquireSlot();<a name="line.670"></a>
-<span class="sourceLineNo">671</span>    try {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>      // Serialize the delete<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.673"></a>
-<span class="sourceLineNo">674</span>        ProcedureWALFormat.writeDelete(slot, procIds[i]);<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      }<a name="line.675"></a>
-<span class="sourceLineNo">676</span><a name="line.676"></a>
-<span class="sourceLineNo">677</span>      // Push the transaction data and wait until it is persisted<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      pushData(PushType.DELETE, slot, Procedure.NO_PROC_ID, procIds);<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    } catch (IOException e) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      // We are not able to serialize the procedure.<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      // this is a code error, and we are not able to go on.<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      LOG.error("Unable to serialize the procedures: " + Arrays.toString(procIds), e);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      throw new RuntimeException(e);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    } finally {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      releaseSlot(slot);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    }<a name="line.686"></a>
-<span class="sourceLineNo">687</span>  }<a name="line.687"></a>
-<span class="sourceLineNo">688</span><a name="line.688"></a>
-<span class="sourceLineNo">689</span>  private ByteSlot acquireSlot() {<a name="line.689"></a>
-<span class="sourceLineNo">690</span>    ByteSlot slot = slotsCache.poll();<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    return slot != null ? slot : new ByteSlot();<a name="line.691"></a>
-<span class="sourceLineNo">692</span>  }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>  private void releaseSlot(final ByteSlot slot) {<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    slot.reset();<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    slotsCache.offer(slot);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>  }<a name="line.697"></a>
-<span class="sourceLineNo">698</span><a name="line.698"></a>
-<span class="sourceLineNo">699</span>  private enum PushType { INSERT, UPDATE, DELETE }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span>  private long pushData(final PushType type, final ByteSlot slot,<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      final long procId, final long[] subProcIds) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    if (!isRunning()) {<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      throw new RuntimeException("the store must be running before inserting data");<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    }<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    if (logs.isEmpty()) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      throw new RuntimeException("recoverLease() must be called before inserting data");<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    }<a name="line.708"></a>
-<span class="sourceLineNo">709</span><a name="line.709"></a>
-<span class="sourceLineNo">710</span>    long logId = -1;<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    lock.lock();<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    try {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>      // Wait for the sync to be completed<a name="line.713"></a>
-<span class="sourceLineNo">714</span>      while (true) {<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        if (!isRunning()) {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>          throw new RuntimeException("store no longer running");<a name="line.716"></a>
-<span class="sourceLineNo">717</span>        } else if (isSyncAborted()) {<a name="line.717"></a>
-<span class="sourceLineNo">718</span>          throw new RuntimeException("sync aborted", syncException.get());<a name="line.718"></a>
-<span class="sourceLineNo">719</span>        } else if (inSync.get()) {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>          syncCond.await();<a name="line.720"></a>
-<span class="sourceLineNo">721</span>        } else if (slotIndex &gt;= syncMaxSlot) {<a name="line.721"></a>
-<span class="sourceLineNo">722</span>          slotCond.signal();<a name="line.722"></a>
-<span class="sourceLineNo">723</span>          syncCond.await();<a name="line.723"></a>
-<span class="sourceLineNo">724</span>        } else {<a name="line.724"></a>
-<span class="sourceLineNo">725</span>          break;<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        }<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>      final long pushSyncId = syncId.get();<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      updateStoreTracker(type, procId, subProcIds);<a name="line.730"></a>
-<span class="sourceLineNo">731</span>      slots[slotIndex++] = slot;<a name="line.731"></a>
-<span class="sourceLineNo">732</span>      logId = flushLogId;<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>      // Notify that there is new data<a name="line.734"></a>
-<span class="sourceLineNo">735</span>      if (slotIndex == 1) {<a name="line.735"></a>
-<span class="sourceLineNo">736</span>        waitCond.signal();<a name="line.736"></a>
-<span class="sourceLineNo">737</span>      }<a name="line.737"></a>
-<span class="sourceLineNo">738</span><a name="line.738"></a>
-<span class="sourceLineNo">739</span>      // Notify that the slots are full<a name="line.739"></a>
-<span class="sourceLineNo">740</span>      if (slotIndex == syncMaxSlot) {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>        waitCond.signal();<a name="line.741"></a>
-<span class="sourceLineNo">742</span>        slotCond.signal();<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span>      while (pushSyncId == syncId.get() &amp;&amp; isRunning()) {<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        syncCond.await();<a name="line.746"></a>
-<span class="sourceLineNo">747</span>      }<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    } catch (InterruptedException e) {<a name="line.748"></a>
-<span class="sourceLineNo">749</span>      Thread.currentThread().interrupt();<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      sendAbortProcessSignal();<a name="line.750"></a>
-<span class="sourceLineNo">751</span>      throw new RuntimeException(e);<a name="line.751"></a>
-<span class="sourceLineNo">752</span>    } finally {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>      lock.unlock();<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      if (isSyncAborted()) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>        throw new RuntimeException("sync aborted", syncException.get());<a name="line.755"></a>
-<span class="sourceLineNo">756</span>      }<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    }<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    return logId;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>  }<a name="line.759"></a>
-<span class="sourceLineNo">760</span><a name="line.760"></a>
-<span class="sourceLineNo">761</span>  private void updateStoreTracker(final PushType type,<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      final long procId, final long[] subProcIds) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    switch (type) {<a name="line.763"></a>
-<span class="sourceLineNo">764</span>      case INSERT:<a name="line.764"></a>
-<span class="sourceLineNo">765</span>        if (subProcIds == null) {<a name="line.765"></a>
-<span class="sourceLineNo">766</span>          storeTracker.insert(procId);<a name="line.766"></a>
-<span class="sourceLineNo">767</span>        } else if (procId == Procedure.NO_PROC_ID) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>          storeTracker.insert(subProcIds);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>        } else {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>          storeTracker.insert(procId, subProcIds);<a name="line.770"></a>
-<span class="sourceLineNo">771</span>          holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.771"></a>
-<span class="sourceLineNo">772</span>        }<a name="line.772"></a>
-<span class="sourceLineNo">773</span>        break;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>      case UPDATE:<a name="line.774"></a>
-<span class="sourceLineNo">775</span>        storeTracker.update(procId);<a name="line.775"></a>
-<span class="sourceLineNo">776</span>        holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>        break;<a name="line.777"></a>
-<span class="sourceLineNo">778</span>      case DELETE:<a name="line.778"></a>
-<span class="sourceLineNo">779</span>        if (subProcIds != null &amp;&amp; subProcIds.length &gt; 0) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>          storeTracker.delete(subProcIds);<a name="line.780"></a>
-<span class="sourceLineNo">781</span>          holdingCleanupTracker.setDeletedIfModified(subProcIds);<a name="line.781"></a>
-<span class="sourceLineNo">782</span>        } else {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>          storeTracker.delete(procId);<a name="line.783"></a>
-<span class="sourceLineNo">784</span>          holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        }<a name="line.785"></a>
-<span class="sourceLineNo">786</span>        break;<a name="line.786"></a>
-<span class="sourceLineNo">787</span>      default:<a name="line.787"></a>
-<span class="sourceLineNo">788</span>        throw new RuntimeException("invalid push type " + type);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
-<span class="sourceLineNo">790</span>  }<a name="line.790"></a>
-<span class="sourceLineNo">791</span><a name="line.791"></a>
-<span class="sourceLineNo">792</span>  private boolean isSyncAborted() {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    return syncException.get() != null;<a name="line.793"></a>
-<span class="sourceLineNo">794</span>  }<a name="line.794"></a>
-<span class="sourceLineNo">795</span><a name="line.795"></a>
-<span class="sourceLineNo">796</span>  private void syncLoop() throws Throwable {<a name="line.796"></a>
-<span class="sourceLineNo">797</span>    long totalSyncedToStore = 0;<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    inSync.set(false);<a name="line.798"></a>
-<span class="sourceLineNo">799</span>    lock.lock();<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    try {<a name="line.800"></a>
-<span class="sourceLineNo">801</span>      while (isRunning()) {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>        try {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>          // Wait until new data is available<a name="line.803"></a>
-<span class="sourceLineNo">804</span>          if (slotIndex == 0) {<a name="line.804"></a>
-<span class="sourceLineNo">805</span>            if (!loading.get()) {<a name="line.805"></a>
-<span class="sourceLineNo">806</span>              periodicRoll();<a name="line.806"></a>
-<span class="sourceLineNo">807</span>            }<a name="line.807"></a>
-<span class="sourceLineNo">808</span><a name="line.808"></a>
-<span class="sourceLineNo">809</span>            if (LOG.isTraceEnabled()) {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>              float rollTsSec = getMillisFromLastRoll() / 1000.0f;<a name="line.810"></a>
-<span class="sourceLineNo">811</span>              LOG.trace(String.format("Waiting for data. flushed=%s (%s/sec)",<a name="line.811"></a>
-<span class="sourceLineNo">812</span>                        StringUtils.humanSize(totalSynced.get()),<a name="line.812"></a>
-<span class="sourceLineNo">813</span>                        StringUtils.humanSize(totalSynced.get() / rollTsSec)));<a name="line.813"></a>
-<span class="sourceLineNo">814</span>            }<a name="line.814"></a>
-<span class="sourceLineNo">815</span><a name="line.815"></a>
-<span class="sourceLineNo">816</span>            waitCond.await(getMillisToNextPeriodicRoll(), TimeUnit.MILLISECONDS);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>            if (slotIndex == 0) {<a name="line.817"></a>
-<span class="sourceLineNo">818</span>              // no data.. probably a stop() or a periodic roll<a name="line.818"></a>
-<span class="sourceLineNo">819</span>              continue;<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>          // Wait SYNC_WAIT_MSEC or the signal of "slots full" before flushing<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          syncMaxSlot = runningProcCount;<a name="line.823"></a>
-<span class="sourceLineNo">824</span>          assert syncMaxSlot &gt; 0 : "unexpected syncMaxSlot=" + syncMaxSlot;<a name="line.824"></a>
-<span class="sourceLineNo">825</span>          final long syncWaitSt = System.currentTimeMillis();<a name="line.825"></a>
-<span class="sourceLineNo">826</span>          if (slotIndex != syncMaxSlot) {<a name="line.826"></a>
-<span class="sourceLineNo">827</span>            slotCond.await(syncWaitMsec, TimeUnit.MILLISECONDS);<a name="line.827"></a>
-<span class="sourceLineNo">828</span>          }<a name="line.828"></a>
-<span class="sourceLineNo">829</span><a name="line.829"></a>
-<span class="sourceLineNo">830</span>          final long currentTs = System.currentTimeMillis();<a name="line.830"></a>
-<span class="sourceLineNo">831</span>          final long syncWaitMs = currentTs - syncWaitSt;<a name="line.831"></a>
-<span class="sourceLineNo">832</span>          final float rollSec = getMillisFromLastRoll() / 1000.0f;<a name="line.832"></a>
-<span class="sourceLineNo">833</span>          final float syncedPerSec = totalSyncedToStore / rollSec;<a name="line.833"></a>
-<span class="sourceLineNo">834</span>          if (LOG.isTraceEnabled() &amp;&amp; (syncWaitMs &gt; 10 || slotIndex &lt; syncMaxSlot)) {<a name="line.834"></a>
-<span class="sourceLineNo">835</span>            LOG.trace(String.format("Sync wait %s, slotIndex=%s , totalSynced=%s (%s/sec)",<a name="line.835"></a>
-<span class="sourceLineNo">836</span>                      StringUtils.humanTimeDiff(syncWaitMs), slotIndex,<a name="line.836"></a>
-<span class="sourceLineNo">837</span>                      StringUtils.humanSize(totalSyncedToStore),<a name="line.837"></a>
-<span class="sourceLineNo">838</span>                      StringUtils.humanSize(syncedPerSec)));<a name="line.838"></a>
-<span class="sourceLineNo">839</span>          }<a name="line.839"></a>
-<span class="sourceLineNo">840</span><a name="line.840"></a>
-<span class="sourceLineNo">841</span>          // update webui circular buffers (TODO: get rid of allocations)<a name="line.841"></a>
-<span class="sourceLineNo">842</span>          final SyncMetrics syncMetrics = new SyncMetrics();<a name="line.842"></a>
-<span class="sourceLineNo">843</span>          syncMetrics.timestamp = currentTs;<a name="line.843"></a>
-<span class="sourceLineNo">844</span>          syncMetrics.syncWaitMs = syncWaitMs;<a name="line.844"></a>
-<span class="sourceLineNo">845</span>          syncMetrics.syncedEntries = slotIndex;<a name="line.845"></a>
-<span class="sourceLineNo">846</span>          syncMetrics.totalSyncedBytes = totalSyncedToStore;<a name="line.846"></a>
-<span class="sourceLineNo">847</span>          syncMetrics.syncedPerSec = syncedPerSec;<a name="line.847"></a>
-<span class="sourceLineNo">848</span>          syncMetricsQueue.add(syncMetrics);<a name="line.848"></a>
-<span class="sourceLineNo">849</span><a name="line.849"></a>
-<span class="sourceLineNo">850</span>          // sync<a name="line.850"></a>
-<span class="sourceLineNo">851</span>          inSync.set(true);<a name="line.851"></a>
-<span class="sourceLineNo">852</span>          long slotSize = syncSlots();<a name="line.852"></a>
-<span class="sourceLineNo">853</span>          logs.getLast().addToSize(slotSize);<a name="line.853"></a>
-<span class="sourceLineNo">854</span>          totalSyncedToStore = totalSynced.addAndGet(slotSize);<a name="line.854"></a>
-<span class="sourceLineNo">855</span>          slotIndex = 0;<a name="line.855"></a>
-<span class="sourceLineNo">856</span>          inSync.set(false);<a name="line.856"></a>
-<span class="sourceLineNo">857</span>          syncId.incrementAndGet();<a name="line.857"></a>
-<span class="sourceLineNo">858</span>        } catch (InterruptedException e) {<a name="line.858"></a>
-<span class="sourceLineNo">859</span>          Thread.currentThread().interrupt();<a name="line.859"></a>
-<span class="sourceLineNo">860</span>          syncException.compareAndSet(null, e);<a name="line.860"></a>
-<span class="sourceLineNo">861</span>          sendAbortProcessSignal();<a name="line.861"></a>
-<span class="sourceLineNo">862</span>          throw e;<a name="line.862"></a>
-<span class="sourceLineNo">863</span>        } catch (Throwable t) {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>          syncException.compareAndSet(null, t);<a name="line.864"></a>
-<span class="sourceLineNo">865</span>          sendAbortProcessSignal();<a name="line.865"></a>
-<span class="sourceLineNo">866</span>          throw t;<a name="line.866"></a>
-<span class="sourceLineNo">867</span>        } finally {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>          syncCond.signalAll();<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        }<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      }<a name="line.870"></a>
-<span class="sourceLineNo">871</span>    } finally {<a name="line.871"></a>
-<span class="sourceLineNo">872</span>      lock.unlock();<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    }<a name="line.873"></a>
-<span class="sourceLineNo">874</span>  }<a name="line.874"></a>
-<span class="sourceLineNo">875</span><a name="line.875"></a>
-<span class="sourceLineNo">876</span>  public ArrayList&lt;SyncMetrics&gt; getSyncMetrics() {<a name="line.876"></a>
-<span class="sourceLineNo">877</span>    lock.lock();<a name="line.877"></a>
-<span class="sourceLineNo">878</span>    try {<a name="line.878"></a>
-<span class="sourceLineNo">879</span>      return new ArrayList&lt;&gt;(syncMetricsQueue);<a name="line.879"></a>
-<span class="sourceLineNo">880</span>    } finally {<a name="line.880"></a>
-<span class="sourceLineNo">881</span>      lock.unlock();<a name="line.881"></a>
-<span class="sourceLineNo">882</span>    }<a name="line.882"></a>
-<span class="sourceLineNo">883</span>  }<a name="line.883"></a>
-<span class="sourceLineNo">884</span><a name="line.884"></a>
-<span class="sourceLineNo">885</span>  private long syncSlots() throws Throwable {<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    int retry = 0;<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    int logRolled = 0;<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    long totalSynced = 0;<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    do {<a name="line.889"></a>
-<span class="sourceLineNo">890</span>      try {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>        totalSynced = syncSlots(stream, slots, 0, slotIndex);<a name="line.891"></a>
-<span class="sourceLineNo">892</span>        break;<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      } catch (Throwable e) {<a name="line.893"></a>
-<span class="sourceLineNo">894</span>        LOG.warn("unable to sync slots, retry=" + retry);<a name="line.894"></a>
-<span class="sourceLineNo">895</span>        if (++retry &gt;= maxRetriesBeforeRoll) {<a name="line.895"></a>
-<span class="sourceLineNo">896</span>          if (logRolled &gt;= maxSyncFailureRoll &amp;&amp; isRunning()) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>            LOG.error("Sync slots after log roll failed, abort.", e);<a name="line.897"></a>
-<span class="sourceLineNo">898</span>            throw e;<a name="line.898"></a>
-<span class="sourceLineNo">899</span>          }<a name="line.899"></a>
-<span class="sourceLineNo">900</span><a name="line.900"></a>
-<span class="sourceLineNo">901</span>          if (!rollWriterWithRetries()) {<a name="line.901"></a>
-<span class="sourceLineNo">902</span>            throw e;<a name="line.902"></a>
-<span class="sourceLineNo">903</span>          }<a name="line.903"></a>
-<span class="sourceLineNo">904</span><a name="line.904"></a>
-<span class="sourceLineNo">905</span>          logRolled++;<a name="line.905"></a>
-<span class="sourceLineNo">906</span>          retry = 0;<a name="line.906"></a>
-<span class="sourceLineNo">907</span>        }<a name="line.907"></a>
-<span class="sourceLineNo">908</span>      }<a name="line.908"></a>
-<span class="sourceLineNo">909</span>    } while (isRunning());<a name="line.909"></a>
-<span class="sourceLineNo">910</span>    return totalSynced;<a name="line.910"></a>
-<span class="sourceLineNo">911</span>  }<a name="line.911"></a>
-<span class="sourceLineNo">912</span><a name="line.912"></a>
-<span class="sourceLineNo">913</span>  protected long syncSlots(final FSDataOutputStream stream, final ByteSlot[] slots,<a name="line.913"></a>
-<span class="sourceLineNo">914</span>      final int offset, final int count) throws IOException {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>    long totalSynced = 0;<a name="line.915"></a>
-<span class="sourceLineNo">916</span>    for (int i = 0; i &lt; count; ++i) {<a name="line.916"></a>
-<span class="sourceLineNo">917</span>      final ByteSlot data = slots[offset + i];<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      data.writeTo(stream);<a name="line.918"></a>
-<span class="sourceLineNo">919</span>      totalSynced += data.size();<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    }<a name="line.920"></a>
-<span class="sourceLineNo">921</span><a name="line.921"></a>
-<span class="sourceLineNo">922</span>    syncStream(stream);<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    sendPostSyncSignal();<a name="line.923"></a>
-<span class="sourceLineNo">924</span><a name="line.924"></a>
-<span class="sourceLineNo">925</span>    if (LOG.isTraceEnabled()) {<a name="line.925"></a>
-<span class="sourceLineNo">926</span>      LOG.trace("Sync slots=" + count + '/' + syncMaxSlot +<a name="line.926"></a>
-<span class="sourceLineNo">927</span>                ", flushed=" + StringUtils.humanSize(totalSynced));<a name="line.927"></a>
-<span class="sourceLineNo">928</span>    }<a name="line.928"></a>
-<span class="sourceLineNo">929</span>    return totalSynced;<a name="line.929"></a>
-<span class="sourceLineNo">930</span>  }<a name="line.930"></a>
-<span class="sourceLineNo">931</span><a name="line.931"></a>
-<span class="sourceLineNo">932</span>  protected void syncStream(final FSDataOutputStream stream) throws IOException {<a name="line.932"></a>
-<span class="sourceLineNo">933</span>    if (useHsync) {<a name="line.933"></a>
-<span class="sourceLineNo">934</span>      stream.hsync();<a name="line.934"></a>
-<span class="sourceLineNo">935</span>    } else {<a name="line.935"></a>
-<span class="sourceLineNo">936</span>      stream.hflush();<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    }<a name="line.937"></a>
-<span class="sourceLineNo">938</span>  }<a name="line.938"></a>
-<span class="sourceLineNo">939</span><a name="line.939"></a>
-<span class="sourceLineNo">940</span>  private boolean rollWriterWithRetries() {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    for (int i = 0; i &lt; rollRetries &amp;&amp; isRunning(); ++i) {<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      if (i &gt; 0) Threads.sleepWithoutInterrupt(waitBeforeRoll * i);<a name="line.942"></a>
-<span class="sourceLineNo">943</span><a name="line.943"></a>
-<span class="sourceLineNo">944</span>      try {<a name="line.944"></a>
-<span class="sourceLineNo">945</span>        if (rollWriter()) {<a name="line.945"></a>
-<span class="sourceLineNo">946</span>          return true;<a name="line.946"></a>
-<span class="sourceLineNo">947</span>        }<a name="line.947"></a>
-<span class="sourceLineNo">948</span>      } catch (IOException e) {<a name="line.948"></a>
-<span class="sourceLineNo">949</span>        LOG.warn("Unable to roll the log, attempt=" + (i + 1), e);<a name="line.949"></a>
-<span class="sourceLineNo">950</span>      }<a name="line.950"></a>
-<span class="sourceLineNo">951</span>    }<a name="line.951"></a>
-<span class="sourceLineNo">952</span>    LOG.error(HBaseMarkers.FATAL, "Unable to roll the log");<a name="line.952"></a>
-<span class="sourceLineNo">953</span>    return false;<a name="line.953"></a>
-<span class="sourceLineNo">954</span>  }<a name="line.954"></a>
-<span class="sourceLineNo">955</span><a name="line.955"></a>
-<span class="sourceLineNo">956</span>  private boolean tryRollWriter() {<a name="line.956"></a>
-<span class="sourceLineNo">957</span>    try {<a name="line.957"></a>
-<span class="sourceLineNo">958</span>      return rollWriter();<a name="line.958"></a>
-<span class="sourceLineNo">959</span>    } catch (IOException e) {<a name="line.959"></a>
-<span class="sourceLineNo">960</span>      LOG.warn("Unable to roll the log", e);<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      return false;<a name="line.961"></a>
-<span class="sourceLineNo">962</span>    }<a name="line.962"></a>
-<span class="sourceLineNo">963</span>  }<a name="line.963"></a>
-<span class="sourceLineNo">964</span><a name="line.964"></a>
-<span class="sourceLineNo">965</span>  public long getMillisToNextPeriodicRoll() {<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    if (lastRollTs.get() &gt; 0 &amp;&amp; periodicRollMsec &gt; 0) {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>      return periodicRollMsec - getMillisFromLastRoll();<a name="line.967"></a>
-<span class="sourceLineNo">968</span>    }<a name="line.968"></a>
-<span class="sourceLineNo">969</span>    return Long.MAX_VALUE;<a name="line.969"></a>
-<span class="sourceLineNo">970</span>  }<a name="line.970"></a>
-<span class="sourceLineNo">971</span><a name="line.971"></a>
-<span class="sourceLineNo">972</span>  public long getMillisFromLastRoll() {<a name="line.972"></a>
-<span class="sourceLineNo">973</span>    return (System.currentTimeMillis() - lastRollTs.get());<a name="line.973"></a>
-<span class="sourceLineNo">974</span>  }<a name="line.974"></a>
-<span class="sourceLineNo">975</span><a name="line.975"></a>
-<span class="sourceLineNo">976</span>  @VisibleForTesting<a name="line.976"></a>
-<span class="sourceLineNo">977</span>  void periodicRollForTesting() throws IOException {<a name="line.977"></a>
-<span class="sourceLineNo">978</span>    lock.lock();<a name="line.978"></a>
-<span class="sourceLineNo">979</span>    try {<a name="line.979"></a>
-<span class="sourceLineNo">980</span>      periodicRoll();<a name="line.980"></a>
-<span class="sourceLineNo">981</span>    } finally {<a name="line.981"></a>
-<span class="sourceLineNo">982</span>      lock.unlock();<a name="line.982"></a>
-<span class="sourceLineNo">983</span>    }<a name="line.983"></a>
-<span class="sourceLineNo">984</span>  }<a name="line.984"></a>
-<span class="sourceLineNo">985</span><a name="line.985"></a>
-<span class="sourceLineNo">986</span>  @VisibleForTesting<a name="line.986"></a>
-<span class="sourceLineNo">987</span>  public boolean rollWriterForTesting() throws IOException {<a name="line.987"></a>
-<span class="sourceLineNo">988</span>    lock.lock();<a name="line.988"></a>
-<span class="sourceLineNo">989</span>    try {<a name="line.989"></a>
-<span class="sourceLineNo">990</span>      return rollWriter();<a name="line.990"></a>
-<span class="sourceLineNo">991</span>    } finally {<a name="line.991"></a>
-<span class="sourceLineNo">992</span>      lock.unlock();<a name="line.992"></a>
-<span class="sourceLineNo">993</span>    }<a name="line.993"></a>
-<span class="sourceLineNo">994</span>  }<a name="line.994"></a>
-<span class="sourceLineNo">995</span><a name="line.995"></a>
-<span class="sourceLineNo">996</span>  @VisibleForTesting<a name="line.996"></a>
-<span class="sourceLineNo">997</span>  void removeInactiveLogsForTesting() throws Exception {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>    lock.lock();<a name="line.998"></a>
-<span class="sourceLineNo">999</span>    try {<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>      removeInactiveLogs();<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>    } finally  {<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>      lock.unlock();<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>    }<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>  }<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span><a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>  private void periodicRoll() throws IOException {<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>    if (storeTracker.isEmpty()) {<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>      LOG.trace("no active procedures");<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>      tryRollWriter();<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>      removeAllLogs(flushLogId - 1, "no active procedures");<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>    } else {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      if (storeTracker.isAllModified()) {<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>        LOG.trace("all the active procedures are in the latest log");<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>        removeAllLogs(flushLogId - 1, "all the active procedures are in the latest log");<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>      }<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span><a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>      // if the log size has exceeded the roll threshold<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>      // or the periodic roll timeout is expired, try to roll the wal.<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>      if (totalSynced.get() &gt; rollThreshold || getMillisToNextPeriodicRoll() &lt;= 0) {<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>        tryRollWriter();<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>      }<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span><a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>      removeInactiveLogs();<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>    }<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>  }<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>  private boolean rollWriter() throws IOException {<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    if (!isRunning()) {<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>      return false;<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    }<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span><a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>    // Create new state-log<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>    if (!rollWriter(flushLogId + 1)) {<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      LOG.warn("someone else has already created log {}", flushLogId);<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>      return false;<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>    }<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span><a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>    // We have the lease on the log,<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>    // but we should check if someone else has created new files<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>    if (getMaxLogId(getLogFiles()) &gt; flushLogId) {<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>      LOG.warn("Someone else created new logs. Expected maxLogId &lt; {}", flushLogId);<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>      logs.getLast().removeFile(this.walArchiveDir);<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>      return false;<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    }<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span><a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    // We have the lease on the log<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>    return true;<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>  }<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span><a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>  @VisibleForTesting<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>  boolean rollWriter(long logId) throws IOException {<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    assert logId &gt; flushLogId : "logId=" + logId + " flushLogId=" + flushLogId;<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    assert lock.isHeldByCurrentThread() : "expected to be the lock owner. " + lock.isLocked();<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span><a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    ProcedureWALHeader header = ProcedureWALHeader.newBuilder()<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>      .setVersion(ProcedureWALFormat.HEADER_VERSION)<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>      .setType(ProcedureWALFormat.LOG_TYPE_STREAM)<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>      .setMinProcId(storeTracker.getActiveMinProcId())<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      .setLogId(logId)<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      .build();<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span><a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    FSDataOutputStream newStream = null;<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>    Path newLogFile = null;<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    long startPos = -1;<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    newLogFile = getLogFilePath(logId);<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    try {<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>      newStream = CommonFSUtils.createForWal(fs, newLogFile, false);<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    } catch (FileAlreadyExistsException e) {<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>      LOG.error("Log file with id={} already exists", logId, e);<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>      return false;<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    } catch (RemoteException re) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      LOG.warn("failed to create log file with id={}", logId, re);<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>      return false;<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    }<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    // After we create the stream but before we attempt to use it at all<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    // ensure that we can provide the level of data safety we're configured<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    // to provide.<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>    final String durability = useHsync ? "hsync" : "hflush";<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    if (enforceStreamCapability &amp;&amp; !(CommonFSUtils.hasCapability(newStream, durability))) {<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>        throw new IllegalStateException("The procedure WAL relies on the ability to " + durability +<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>          " for proper operation during component failures, but the underlying filesystem does " +<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>          "not support doing so. Please check the config value of '" + USE_HSYNC_CONF_KEY +<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>          "' to set the desired level of robustness and ensure the config value of '" +<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>          CommonFSUtils.HBASE_WAL_DIR + "' points to a FileSystem mount that can provide it.");<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>    }<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    try {<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>      ProcedureWALFormat.writeHeader(newStream, header);<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>      startPos = newStream.getPos();<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    } catch (IOException ioe) {<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>      LOG.warn("Encountered exception writing header", ioe);<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>      newStream.close();<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      return false;<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>    }<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span><a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    closeCurrentLogStream(false);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span><a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>    storeTracker.resetModified();<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>    stream = newStream;<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>    flushLogId = logId;<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>    totalSynced.set(0);<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    long rollTs = System.currentTimeMillis();<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    lastRollTs.set(rollTs);<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    logs.add(new ProcedureWALFile(fs, newLogFile, header, startPos, rollTs));<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span><a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    // if it's the first next WAL being added, build the holding cleanup tracker<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    if (logs.size() == 2) {<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>      buildHoldingCleanupTracker();<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    } else if (logs.size() &gt; walCountWarnThreshold) {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      LOG.warn("procedure WALs count={} above the warning threshold {}. check running procedures" +<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>        " to see if something is stuck.", logs.size(), walCountWarnThreshold);<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>      // This is just like what we have done at RS side when there are too many wal files. For RS,<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>      // if there are too many wal files, we will find out the wal entries in the oldest file, and<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>      // tell the upper layer to flush these regions so the wal entries will be useless and then we<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>      // can delete the wal file. For WALProcedureStore, the assumption is that, if all the<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>      // procedures recorded in a proc wal file are modified or deleted in a new proc wal file, then<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>      // we are safe to delete it. So here if there are too many proc wal files, we will find out<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>      // the procedure ids in the oldest file, which are neither modified nor deleted in newer proc<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>      // wal files, and tell upper layer to update the state of these procedures to the newest proc<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>      // wal file(by calling ProcedureStore.update), then we are safe to delete the oldest proc wal<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>      // file.<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>      sendForceUpdateSignal(holdingCleanupTracker.getAllActiveProcIds());<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>    }<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span><a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>    LOG.info("Rolled new Procedure Store WAL, id={}", logId);<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    return true;<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>  }<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span><a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>  private void closeCurrentLogStream(boolean abort) {<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    if (stream == null || logs.isEmpty()) {<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>      return;<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>    try {<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>      ProcedureWALFile log = logs.getLast();<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>      log.setProcIds(storeTracker.getModifiedMinProcId(), storeTracker.getModifiedMaxProcId());<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>      log.updateLocalTracker(storeTracker);<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>      if (!abort) {<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>        long trailerSize = ProcedureWALFormat.writeTrailer(stream, storeTracker);<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>        log.addToSize(trailerSize);<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>      }<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>    } catch (IOException e) {<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>      LOG.warn("Unable to write the trailer", e);<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    }<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>    try {<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>      stream.close();<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    } catch (IOException e) {<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>      LOG.error("Unable to close the stream", e);<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>    }<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    stream = null;<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>  }<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span><a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>  // ==========================================================================<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>  //  Log Files cleaner helpers<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>  // ==========================================================================<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>  private void removeInactiveLogs() throws IOException {<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>    // We keep track of which procedures are holding the oldest WAL in 'holdingCleanupTracker'.<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    // once there is nothing olding the oldest WAL we can remove it.<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>    while (logs.size() &gt; 1 &amp;&amp; holdingCleanupTracker.isEmpty()) {<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>      LOG.info("Remove the oldest log {}", logs.getFirst());<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      removeLogFile(logs.getFirst(), walArchiveDir);<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>      buildHoldingCleanupTracker();<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>    }<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span><a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>    // TODO: In case we are holding up a lot of logs for long time we should<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    // rewrite old procedures (in theory parent procs) to the new WAL.<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>  }<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span><a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>  private void buildHoldingCleanupTracker() {<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    if (logs.size() &lt;= 1) {<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>      // we only have one wal, so nothing to do<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>      holdingCleanupTracker.reset();<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>      return;<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    }<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span><a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    // compute the holding tracker.<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>    // - the first WAL is used for the 'updates'<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    // - the global tracker will be used to determine whether a procedure has been deleted<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>    // - other trackers will be used to determine whether a procedure has been updated, as a deleted<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    // procedure can always be detected by checking the global tracker, we can save the deleted<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>    // checks when applying other trackers<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>    holdingCleanupTracker.resetTo(logs.getFirst().getTracker(), true);<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>    holdingCleanupTracker.setDeletedIfDeletedByThem(storeTracker);<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>    // the logs is a linked list, so avoid calling get(index) on it.<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>    Iterator&lt;ProcedureWALFile&gt; iter = logs.iterator();<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    // skip the tracker for the first file when creating the iterator.<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    iter.next();<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>    ProcedureStoreTracker tracker = iter.next().getTracker();<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>    // testing iter.hasNext after calling iter.next to skip applying the tracker for last file,<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>    // which is just the storeTracker

<TRUNCATED>

[10/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html
index 98ef11a..ab175b6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html
@@ -256,1168 +256,1169 @@
 <span class="sourceLineNo">248</span>    this.leaseRecovery = leaseRecovery;<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    this.walDir = walDir;<a name="line.249"></a>
 <span class="sourceLineNo">250</span>    this.walArchiveDir = walArchiveDir;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    this.fs = walDir.getFileSystem(conf);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    this.enforceStreamCapability = conf.getBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE, true);<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>    // Create the log directory for the procedure store<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    if (!fs.exists(walDir)) {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      if (!fs.mkdirs(walDir)) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        throw new IOException("Unable to mkdir " + walDir);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    // Now that it exists, set the log policy<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    String storagePolicy =<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        conf.get(HConstants.WAL_STORAGE_POLICY, HConstants.DEFAULT_WAL_STORAGE_POLICY);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    CommonFSUtils.setStoragePolicy(fs, walDir, storagePolicy);<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>    // Create archive dir up front. Rename won't work w/o it up on HDFS.<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    if (this.walArchiveDir != null &amp;&amp; !this.fs.exists(this.walArchiveDir)) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      if (this.fs.mkdirs(this.walArchiveDir)) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        LOG.debug("Created Procedure Store WAL archive dir {}", this.walArchiveDir);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      } else {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        LOG.warn("Failed create of {}", this.walArchiveDir);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      }<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>  @Override<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public void start(int numSlots) throws IOException {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    if (!setRunning(true)) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      return;<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>    // Init buffer slots<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    loading.set(true);<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    runningProcCount = numSlots;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    syncMaxSlot = numSlots;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    slots = new ByteSlot[numSlots];<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    slotsCache = new LinkedTransferQueue&lt;&gt;();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    while (slotsCache.size() &lt; numSlots) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      slotsCache.offer(new ByteSlot());<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>    // Tunings<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    walCountWarnThreshold =<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      conf.getInt(WAL_COUNT_WARN_THRESHOLD_CONF_KEY, DEFAULT_WAL_COUNT_WARN_THRESHOLD);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    maxRetriesBeforeRoll =<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      conf.getInt(MAX_RETRIES_BEFORE_ROLL_CONF_KEY, DEFAULT_MAX_RETRIES_BEFORE_ROLL);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    maxSyncFailureRoll = conf.getInt(MAX_SYNC_FAILURE_ROLL_CONF_KEY, DEFAULT_MAX_SYNC_FAILURE_ROLL);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    waitBeforeRoll = conf.getInt(WAIT_BEFORE_ROLL_CONF_KEY, DEFAULT_WAIT_BEFORE_ROLL);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    rollRetries = conf.getInt(ROLL_RETRIES_CONF_KEY, DEFAULT_ROLL_RETRIES);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    rollThreshold = conf.getLong(ROLL_THRESHOLD_CONF_KEY, DEFAULT_ROLL_THRESHOLD);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    periodicRollMsec = conf.getInt(PERIODIC_ROLL_CONF_KEY, DEFAULT_PERIODIC_ROLL);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    syncWaitMsec = conf.getInt(SYNC_WAIT_MSEC_CONF_KEY, DEFAULT_SYNC_WAIT_MSEC);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    useHsync = conf.getBoolean(USE_HSYNC_CONF_KEY, DEFAULT_USE_HSYNC);<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span>    // WebUI<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    syncMetricsQueue = new CircularFifoQueue&lt;&gt;(<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      conf.getInt(STORE_WAL_SYNC_STATS_COUNT, DEFAULT_SYNC_STATS_COUNT));<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>    // Init sync thread<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    syncThread = new Thread("WALProcedureStoreSyncThread") {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      @Override<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      public void run() {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>        try {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>          syncLoop();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>        } catch (Throwable e) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>          LOG.error("Got an exception from the sync-loop", e);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          if (!isSyncAborted()) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>            sendAbortProcessSignal();<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      }<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    };<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    syncThread.start();<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  @Override<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  public void stop(final boolean abort) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    if (!setRunning(false)) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      return;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    }<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>    LOG.info("Stopping the WAL Procedure Store, isAbort=" + abort +<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      (isSyncAborted() ? " (self aborting)" : ""));<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    sendStopSignal();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    if (!isSyncAborted()) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      try {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        while (syncThread.isAlive()) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>          sendStopSignal();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>          syncThread.join(250);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      } catch (InterruptedException e) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        LOG.warn("join interrupted", e);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        Thread.currentThread().interrupt();<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>    // Close the writer<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    closeCurrentLogStream(abort);<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    // Close the old logs<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    // they should be already closed, this is just in case the load fails<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    // and we call start() and then stop()<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    for (ProcedureWALFile log: logs) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      log.close();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    logs.clear();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    loading.set(true);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  private void sendStopSignal() {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    if (lock.tryLock()) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      try {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        waitCond.signalAll();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        syncCond.signalAll();<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      } finally {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        lock.unlock();<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      }<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  }<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>  @Override<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  public int getNumThreads() {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    return slots == null ? 0 : slots.length;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>  @Override<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  public int setRunningProcedureCount(final int count) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    this.runningProcCount = count &gt; 0 ? Math.min(count, slots.length) : slots.length;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    return this.runningProcCount;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>  public ProcedureStoreTracker getStoreTracker() {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    return storeTracker;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  }<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>  public ArrayList&lt;ProcedureWALFile&gt; getActiveLogs() {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    lock.lock();<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      return new ArrayList&lt;&gt;(logs);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    } finally {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      lock.unlock();<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    }<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>  public Set&lt;ProcedureWALFile&gt; getCorruptedLogs() {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    return corruptedLogs;<a name="line.395"></a>
-<span class="sourceLineNo">396</span>  }<a name="line.396"></a>
-<span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span>  @Override<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  public void recoverLease() throws IOException {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    lock.lock();<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    try {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      LOG.debug("Starting WAL Procedure Store lease recovery");<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      boolean afterFirstAttempt = false;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      while (isRunning()) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        // Don't sleep before first attempt<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        if (afterFirstAttempt) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>          LOG.trace("Sleep {} ms after first lease recovery attempt.",<a name="line.407"></a>
-<span class="sourceLineNo">408</span>              waitBeforeRoll);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          Threads.sleepWithoutInterrupt(waitBeforeRoll);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>        } else {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>          afterFirstAttempt = true;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        FileStatus[] oldLogs = getLogFiles();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        // Get Log-MaxID and recover lease on old logs<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        try {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>          flushLogId = initOldLogs(oldLogs);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        } catch (FileNotFoundException e) {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>          LOG.warn("Someone else is active and deleted logs. retrying.", e);<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          continue;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>        // Create new state-log<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        if (!rollWriter(flushLogId + 1)) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          // someone else has already created this log<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          LOG.debug("Someone else has already created log {}. Retrying.", flushLogId);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>          continue;<a name="line.426"></a>
-<span class="sourceLineNo">427</span>        }<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>        // We have the lease on the log<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        oldLogs = getLogFiles();<a name="line.430"></a>
-<span class="sourceLineNo">431</span>        if (getMaxLogId(oldLogs) &gt; flushLogId) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>          LOG.debug("Someone else created new logs. Expected maxLogId &lt; {}", flushLogId);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>          logs.getLast().removeFile(this.walArchiveDir);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          continue;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>        }<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>        LOG.debug("Lease acquired for flushLogId={}", flushLogId);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        break;<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      }<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    } finally {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      lock.unlock();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  }<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>  @Override<a name="line.445"></a>
-<span class="sourceLineNo">446</span>  public void load(ProcedureLoader loader) throws IOException {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    lock.lock();<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    try {<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      if (logs.isEmpty()) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        throw new RuntimeException("recoverLease() must be called before loading data");<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      }<a name="line.451"></a>
-<span class="sourceLineNo">452</span><a name="line.452"></a>
-<span class="sourceLineNo">453</span>      // Nothing to do, If we have only the current log.<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      if (logs.size() == 1) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        LOG.debug("No state logs to replay.");<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        loader.setMaxProcId(0);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        return;<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // Load the old logs<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      Iterator&lt;ProcedureWALFile&gt; it = logs.descendingIterator();<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      it.next(); // Skip the current log<a name="line.462"></a>
-<span class="sourceLineNo">463</span><a name="line.463"></a>
-<span class="sourceLineNo">464</span>      ProcedureWALFormat.load(it, storeTracker, new ProcedureWALFormat.Loader() {<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>        @Override<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        public void setMaxProcId(long maxProcId) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>          loader.setMaxProcId(maxProcId);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>        }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>        @Override<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        public void load(ProcedureIterator procIter) throws IOException {<a name="line.472"></a>
-<span class="sourceLineNo">473</span>          loader.load(procIter);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        }<a name="line.474"></a>
-<span class="sourceLineNo">475</span><a name="line.475"></a>
-<span class="sourceLineNo">476</span>        @Override<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>          loader.handleCorrupted(procIter);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        }<a name="line.479"></a>
-<span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span>        @Override<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        public void markCorruptedWAL(ProcedureWALFile log, IOException e) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>          if (corruptedLogs == null) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>            corruptedLogs = new HashSet&lt;&gt;();<a name="line.484"></a>
-<span class="sourceLineNo">485</span>          }<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          corruptedLogs.add(log);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>          // TODO: sideline corrupted log<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      });<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    } finally {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      try {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        // try to cleanup inactive wals and complete the operation<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        buildHoldingCleanupTracker();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        tryCleanupLogsOnLoad();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        loading.set(false);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      } finally {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>        lock.unlock();<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    }<a name="line.499"></a>
-<span class="sourceLineNo">500</span>  }<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>  private void tryCleanupLogsOnLoad() {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    // nothing to cleanup.<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    if (logs.size() &lt;= 1) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      return;<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span>    // the config says to not cleanup wals on load.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    if (!conf.getBoolean(EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY,<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY)) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      LOG.debug("WALs cleanup on load is not enabled: " + getActiveLogs());<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      return;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    }<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>    try {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      periodicRoll();<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    } catch (IOException e) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      LOG.warn("Unable to cleanup logs on load: " + e.getMessage(), e);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    }<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>  @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span>  public void insert(Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (LOG.isTraceEnabled()) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.trace("Insert " + proc + ", subproc=" + Arrays.toString(subprocs));<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>    ByteSlot slot = acquireSlot();<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    try {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      // Serialize the insert<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      long[] subProcIds = null;<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      if (subprocs != null) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        ProcedureWALFormat.writeInsert(slot, proc, subprocs);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        subProcIds = new long[subprocs.length];<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          subProcIds[i] = subprocs[i].getProcId();<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        }<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      } else {<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        assert !proc.hasParent();<a name="line.539"></a>
-<span class="sourceLineNo">540</span>        ProcedureWALFormat.writeInsert(slot, proc);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>      // Push the transaction data and wait until it is persisted<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      pushData(PushType.INSERT, slot, proc.getProcId(), subProcIds);<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    } catch (IOException e) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      // We are not able to serialize the procedure.<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      // this is a code error, and we are not able to go on.<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: proc=" +<a name="line.548"></a>
-<span class="sourceLineNo">549</span>          proc + ", subprocs=" + Arrays.toString(subprocs), e);<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      throw new RuntimeException(e);<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    } finally {<a name="line.551"></a>
-<span class="sourceLineNo">552</span>      releaseSlot(slot);<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>  @Override<a name="line.556"></a>
-<span class="sourceLineNo">557</span>  public void insert(Procedure&lt;?&gt;[] procs) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    if (LOG.isTraceEnabled()) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      LOG.trace("Insert " + Arrays.toString(procs));<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
-<span class="sourceLineNo">561</span><a name="line.561"></a>
-<span class="sourceLineNo">562</span>    ByteSlot slot = acquireSlot();<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    try {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      // Serialize the insert<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      long[] procIds = new long[procs.length];<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>        assert !procs[i].hasParent();<a name="line.567"></a>
-<span class="sourceLineNo">568</span>        procIds[i] = procs[i].getProcId();<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        ProcedureWALFormat.writeInsert(slot, procs[i]);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>      // Push the transaction data and wait until it is persisted<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      pushData(PushType.INSERT, slot, Procedure.NO_PROC_ID, procIds);<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    } catch (IOException e) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      // We are not able to serialize the procedure.<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      // this is a code error, and we are not able to go on.<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: " +<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          Arrays.toString(procs), e);<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      throw new RuntimeException(e);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    } finally {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      releaseSlot(slot);<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    }<a name="line.582"></a>
-<span class="sourceLineNo">583</span>  }<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>  @Override<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  public void update(Procedure&lt;?&gt; proc) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    if (LOG.isTraceEnabled()) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>      LOG.trace("Update " + proc);<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    }<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span>    ByteSlot slot = acquireSlot();<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    try {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      // Serialize the update<a name="line.593"></a>
-<span class="sourceLineNo">594</span>      ProcedureWALFormat.writeUpdate(slot, proc);<a name="line.594"></a>
-<span class="sourceLineNo">595</span><a name="line.595"></a>
-<span class="sourceLineNo">596</span>      // Push the transaction data and wait until it is persisted<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      pushData(PushType.UPDATE, slot, proc.getProcId(), null);<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    } catch (IOException e) {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      // We are not able to serialize the procedure.<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      // this is a code error, and we are not able to go on.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      throw new RuntimeException(e);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    } finally {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      releaseSlot(slot);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>  }<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span>  @Override<a name="line.608"></a>
-<span class="sourceLineNo">609</span>  public void delete(long procId) {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    LOG.trace("Delete {}", procId);<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    ByteSlot slot = acquireSlot();<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    try {<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      // Serialize the delete<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      ProcedureWALFormat.writeDelete(slot, procId);<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>      // Push the transaction data and wait until it is persisted<a name="line.616"></a>
-<span class="sourceLineNo">617</span>      pushData(PushType.DELETE, slot, procId, null);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    } catch (IOException e) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      // We are not able to serialize the procedure.<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      // this is a code error, and we are not able to go on.<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + procId, e);<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      throw new RuntimeException(e);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    } finally {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>      releaseSlot(slot);<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    }<a name="line.625"></a>
-<span class="sourceLineNo">626</span>  }<a name="line.626"></a>
-<span class="sourceLineNo">627</span><a name="line.627"></a>
-<span class="sourceLineNo">628</span>  @Override<a name="line.628"></a>
-<span class="sourceLineNo">629</span>  public void delete(Procedure&lt;?&gt; proc, long[] subProcIds) {<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    assert proc != null : "expected a non-null procedure";<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    assert subProcIds != null &amp;&amp; subProcIds.length &gt; 0 : "expected subProcIds";<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    if (LOG.isTraceEnabled()) {<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      LOG.trace("Update " + proc + " and Delete " + Arrays.toString(subProcIds));<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    }<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>    ByteSlot slot = acquireSlot();<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    try {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      // Serialize the delete<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      ProcedureWALFormat.writeDelete(slot, proc, subProcIds);<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span>      // Push the transaction data and wait until it is persisted<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      pushData(PushType.DELETE, slot, proc.getProcId(), subProcIds);<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    } catch (IOException e) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      // We are not able to serialize the procedure.<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      // this is a code error, and we are not able to go on.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      throw new RuntimeException(e);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    } finally {<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      releaseSlot(slot);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    }<a name="line.650"></a>
-<span class="sourceLineNo">651</span>  }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>  @Override<a name="line.653"></a>
-<span class="sourceLineNo">654</span>  public void delete(final long[] procIds, final int offset, final int count) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    if (count == 0) return;<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    if (offset == 0 &amp;&amp; count == procIds.length) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      delete(procIds);<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    } else if (count == 1) {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>      delete(procIds[offset]);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    } else {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      delete(Arrays.copyOfRange(procIds, offset, offset + count));<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    }<a name="line.662"></a>
-<span class="sourceLineNo">663</span>  }<a name="line.663"></a>
-<span class="sourceLineNo">664</span><a name="line.664"></a>
-<span class="sourceLineNo">665</span>  private void delete(long[] procIds) {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    if (LOG.isTraceEnabled()) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      LOG.trace("Delete " + Arrays.toString(procIds));<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>    final ByteSlot slot = acquireSlot();<a name="line.670"></a>
-<span class="sourceLineNo">671</span>    try {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>      // Serialize the delete<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.673"></a>
-<span class="sourceLineNo">674</span>        ProcedureWALFormat.writeDelete(slot, procIds[i]);<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      }<a name="line.675"></a>
-<span class="sourceLineNo">676</span><a name="line.676"></a>
-<span class="sourceLineNo">677</span>      // Push the transaction data and wait until it is persisted<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      pushData(PushType.DELETE, slot, Procedure.NO_PROC_ID, procIds);<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    } catch (IOException e) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      // We are not able to serialize the procedure.<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      // this is a code error, and we are not able to go on.<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      LOG.error("Unable to serialize the procedures: " + Arrays.toString(procIds), e);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      throw new RuntimeException(e);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    } finally {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      releaseSlot(slot);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    }<a name="line.686"></a>
-<span class="sourceLineNo">687</span>  }<a name="line.687"></a>
-<span class="sourceLineNo">688</span><a name="line.688"></a>
-<span class="sourceLineNo">689</span>  private ByteSlot acquireSlot() {<a name="line.689"></a>
-<span class="sourceLineNo">690</span>    ByteSlot slot = slotsCache.poll();<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    return slot != null ? slot : new ByteSlot();<a name="line.691"></a>
-<span class="sourceLineNo">692</span>  }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>  private void releaseSlot(final ByteSlot slot) {<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    slot.reset();<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    slotsCache.offer(slot);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>  }<a name="line.697"></a>
-<span class="sourceLineNo">698</span><a name="line.698"></a>
-<span class="sourceLineNo">699</span>  private enum PushType { INSERT, UPDATE, DELETE }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span>  private long pushData(final PushType type, final ByteSlot slot,<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      final long procId, final long[] subProcIds) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    if (!isRunning()) {<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      throw new RuntimeException("the store must be running before inserting data");<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    }<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    if (logs.isEmpty()) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      throw new RuntimeException("recoverLease() must be called before inserting data");<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    }<a name="line.708"></a>
-<span class="sourceLineNo">709</span><a name="line.709"></a>
-<span class="sourceLineNo">710</span>    long logId = -1;<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    lock.lock();<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    try {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>      // Wait for the sync to be completed<a name="line.713"></a>
-<span class="sourceLineNo">714</span>      while (true) {<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        if (!isRunning()) {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>          throw new RuntimeException("store no longer running");<a name="line.716"></a>
-<span class="sourceLineNo">717</span>        } else if (isSyncAborted()) {<a name="line.717"></a>
-<span class="sourceLineNo">718</span>          throw new RuntimeException("sync aborted", syncException.get());<a name="line.718"></a>
-<span class="sourceLineNo">719</span>        } else if (inSync.get()) {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>          syncCond.await();<a name="line.720"></a>
-<span class="sourceLineNo">721</span>        } else if (slotIndex &gt;= syncMaxSlot) {<a name="line.721"></a>
-<span class="sourceLineNo">722</span>          slotCond.signal();<a name="line.722"></a>
-<span class="sourceLineNo">723</span>          syncCond.await();<a name="line.723"></a>
-<span class="sourceLineNo">724</span>        } else {<a name="line.724"></a>
-<span class="sourceLineNo">725</span>          break;<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        }<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>      final long pushSyncId = syncId.get();<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      updateStoreTracker(type, procId, subProcIds);<a name="line.730"></a>
-<span class="sourceLineNo">731</span>      slots[slotIndex++] = slot;<a name="line.731"></a>
-<span class="sourceLineNo">732</span>      logId = flushLogId;<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>      // Notify that there is new data<a name="line.734"></a>
-<span class="sourceLineNo">735</span>      if (slotIndex == 1) {<a name="line.735"></a>
-<span class="sourceLineNo">736</span>        waitCond.signal();<a name="line.736"></a>
-<span class="sourceLineNo">737</span>      }<a name="line.737"></a>
-<span class="sourceLineNo">738</span><a name="line.738"></a>
-<span class="sourceLineNo">739</span>      // Notify that the slots are full<a name="line.739"></a>
-<span class="sourceLineNo">740</span>      if (slotIndex == syncMaxSlot) {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>        waitCond.signal();<a name="line.741"></a>
-<span class="sourceLineNo">742</span>        slotCond.signal();<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span>      while (pushSyncId == syncId.get() &amp;&amp; isRunning()) {<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        syncCond.await();<a name="line.746"></a>
-<span class="sourceLineNo">747</span>      }<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    } catch (InterruptedException e) {<a name="line.748"></a>
-<span class="sourceLineNo">749</span>      Thread.currentThread().interrupt();<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      sendAbortProcessSignal();<a name="line.750"></a>
-<span class="sourceLineNo">751</span>      throw new RuntimeException(e);<a name="line.751"></a>
-<span class="sourceLineNo">752</span>    } finally {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>      lock.unlock();<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      if (isSyncAborted()) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>        throw new RuntimeException("sync aborted", syncException.get());<a name="line.755"></a>
-<span class="sourceLineNo">756</span>      }<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    }<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    return logId;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>  }<a name="line.759"></a>
-<span class="sourceLineNo">760</span><a name="line.760"></a>
-<span class="sourceLineNo">761</span>  private void updateStoreTracker(final PushType type,<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      final long procId, final long[] subProcIds) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    switch (type) {<a name="line.763"></a>
-<span class="sourceLineNo">764</span>      case INSERT:<a name="line.764"></a>
-<span class="sourceLineNo">765</span>        if (subProcIds == null) {<a name="line.765"></a>
-<span class="sourceLineNo">766</span>          storeTracker.insert(procId);<a name="line.766"></a>
-<span class="sourceLineNo">767</span>        } else if (procId == Procedure.NO_PROC_ID) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>          storeTracker.insert(subProcIds);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>        } else {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>          storeTracker.insert(procId, subProcIds);<a name="line.770"></a>
-<span class="sourceLineNo">771</span>          holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.771"></a>
-<span class="sourceLineNo">772</span>        }<a name="line.772"></a>
-<span class="sourceLineNo">773</span>        break;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>      case UPDATE:<a name="line.774"></a>
-<span class="sourceLineNo">775</span>        storeTracker.update(procId);<a name="line.775"></a>
-<span class="sourceLineNo">776</span>        holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>        break;<a name="line.777"></a>
-<span class="sourceLineNo">778</span>      case DELETE:<a name="line.778"></a>
-<span class="sourceLineNo">779</span>        if (subProcIds != null &amp;&amp; subProcIds.length &gt; 0) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>          storeTracker.delete(subProcIds);<a name="line.780"></a>
-<span class="sourceLineNo">781</span>          holdingCleanupTracker.setDeletedIfModified(subProcIds);<a name="line.781"></a>
-<span class="sourceLineNo">782</span>        } else {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>          storeTracker.delete(procId);<a name="line.783"></a>
-<span class="sourceLineNo">784</span>          holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        }<a name="line.785"></a>
-<span class="sourceLineNo">786</span>        break;<a name="line.786"></a>
-<span class="sourceLineNo">787</span>      default:<a name="line.787"></a>
-<span class="sourceLineNo">788</span>        throw new RuntimeException("invalid push type " + type);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
-<span class="sourceLineNo">790</span>  }<a name="line.790"></a>
-<span class="sourceLineNo">791</span><a name="line.791"></a>
-<span class="sourceLineNo">792</span>  private boolean isSyncAborted() {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    return syncException.get() != null;<a name="line.793"></a>
-<span class="sourceLineNo">794</span>  }<a name="line.794"></a>
-<span class="sourceLineNo">795</span><a name="line.795"></a>
-<span class="sourceLineNo">796</span>  private void syncLoop() throws Throwable {<a name="line.796"></a>
-<span class="sourceLineNo">797</span>    long totalSyncedToStore = 0;<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    inSync.set(false);<a name="line.798"></a>
-<span class="sourceLineNo">799</span>    lock.lock();<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    try {<a name="line.800"></a>
-<span class="sourceLineNo">801</span>      while (isRunning()) {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>        try {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>          // Wait until new data is available<a name="line.803"></a>
-<span class="sourceLineNo">804</span>          if (slotIndex == 0) {<a name="line.804"></a>
-<span class="sourceLineNo">805</span>            if (!loading.get()) {<a name="line.805"></a>
-<span class="sourceLineNo">806</span>              periodicRoll();<a name="line.806"></a>
-<span class="sourceLineNo">807</span>            }<a name="line.807"></a>
-<span class="sourceLineNo">808</span><a name="line.808"></a>
-<span class="sourceLineNo">809</span>            if (LOG.isTraceEnabled()) {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>              float rollTsSec = getMillisFromLastRoll() / 1000.0f;<a name="line.810"></a>
-<span class="sourceLineNo">811</span>              LOG.trace(String.format("Waiting for data. flushed=%s (%s/sec)",<a name="line.811"></a>
-<span class="sourceLineNo">812</span>                        StringUtils.humanSize(totalSynced.get()),<a name="line.812"></a>
-<span class="sourceLineNo">813</span>                        StringUtils.humanSize(totalSynced.get() / rollTsSec)));<a name="line.813"></a>
-<span class="sourceLineNo">814</span>            }<a name="line.814"></a>
-<span class="sourceLineNo">815</span><a name="line.815"></a>
-<span class="sourceLineNo">816</span>            waitCond.await(getMillisToNextPeriodicRoll(), TimeUnit.MILLISECONDS);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>            if (slotIndex == 0) {<a name="line.817"></a>
-<span class="sourceLineNo">818</span>              // no data.. probably a stop() or a periodic roll<a name="line.818"></a>
-<span class="sourceLineNo">819</span>              continue;<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>          // Wait SYNC_WAIT_MSEC or the signal of "slots full" before flushing<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          syncMaxSlot = runningProcCount;<a name="line.823"></a>
-<span class="sourceLineNo">824</span>          assert syncMaxSlot &gt; 0 : "unexpected syncMaxSlot=" + syncMaxSlot;<a name="line.824"></a>
-<span class="sourceLineNo">825</span>          final long syncWaitSt = System.currentTimeMillis();<a name="line.825"></a>
-<span class="sourceLineNo">826</span>          if (slotIndex != syncMaxSlot) {<a name="line.826"></a>
-<span class="sourceLineNo">827</span>            slotCond.await(syncWaitMsec, TimeUnit.MILLISECONDS);<a name="line.827"></a>
-<span class="sourceLineNo">828</span>          }<a name="line.828"></a>
-<span class="sourceLineNo">829</span><a name="line.829"></a>
-<span class="sourceLineNo">830</span>          final long currentTs = System.currentTimeMillis();<a name="line.830"></a>
-<span class="sourceLineNo">831</span>          final long syncWaitMs = currentTs - syncWaitSt;<a name="line.831"></a>
-<span class="sourceLineNo">832</span>          final float rollSec = getMillisFromLastRoll() / 1000.0f;<a name="line.832"></a>
-<span class="sourceLineNo">833</span>          final float syncedPerSec = totalSyncedToStore / rollSec;<a name="line.833"></a>
-<span class="sourceLineNo">834</span>          if (LOG.isTraceEnabled() &amp;&amp; (syncWaitMs &gt; 10 || slotIndex &lt; syncMaxSlot)) {<a name="line.834"></a>
-<span class="sourceLineNo">835</span>            LOG.trace(String.format("Sync wait %s, slotIndex=%s , totalSynced=%s (%s/sec)",<a name="line.835"></a>
-<span class="sourceLineNo">836</span>                      StringUtils.humanTimeDiff(syncWaitMs), slotIndex,<a name="line.836"></a>
-<span class="sourceLineNo">837</span>                      StringUtils.humanSize(totalSyncedToStore),<a name="line.837"></a>
-<span class="sourceLineNo">838</span>                      StringUtils.humanSize(syncedPerSec)));<a name="line.838"></a>
-<span class="sourceLineNo">839</span>          }<a name="line.839"></a>
-<span class="sourceLineNo">840</span><a name="line.840"></a>
-<span class="sourceLineNo">841</span>          // update webui circular buffers (TODO: get rid of allocations)<a name="line.841"></a>
-<span class="sourceLineNo">842</span>          final SyncMetrics syncMetrics = new SyncMetrics();<a name="line.842"></a>
-<span class="sourceLineNo">843</span>          syncMetrics.timestamp = currentTs;<a name="line.843"></a>
-<span class="sourceLineNo">844</span>          syncMetrics.syncWaitMs = syncWaitMs;<a name="line.844"></a>
-<span class="sourceLineNo">845</span>          syncMetrics.syncedEntries = slotIndex;<a name="line.845"></a>
-<span class="sourceLineNo">846</span>          syncMetrics.totalSyncedBytes = totalSyncedToStore;<a name="line.846"></a>
-<span class="sourceLineNo">847</span>          syncMetrics.syncedPerSec = syncedPerSec;<a name="line.847"></a>
-<span class="sourceLineNo">848</span>          syncMetricsQueue.add(syncMetrics);<a name="line.848"></a>
-<span class="sourceLineNo">849</span><a name="line.849"></a>
-<span class="sourceLineNo">850</span>          // sync<a name="line.850"></a>
-<span class="sourceLineNo">851</span>          inSync.set(true);<a name="line.851"></a>
-<span class="sourceLineNo">852</span>          long slotSize = syncSlots();<a name="line.852"></a>
-<span class="sourceLineNo">853</span>          logs.getLast().addToSize(slotSize);<a name="line.853"></a>
-<span class="sourceLineNo">854</span>          totalSyncedToStore = totalSynced.addAndGet(slotSize);<a name="line.854"></a>
-<span class="sourceLineNo">855</span>          slotIndex = 0;<a name="line.855"></a>
-<span class="sourceLineNo">856</span>          inSync.set(false);<a name="line.856"></a>
-<span class="sourceLineNo">857</span>          syncId.incrementAndGet();<a name="line.857"></a>
-<span class="sourceLineNo">858</span>        } catch (InterruptedException e) {<a name="line.858"></a>
-<span class="sourceLineNo">859</span>          Thread.currentThread().interrupt();<a name="line.859"></a>
-<span class="sourceLineNo">860</span>          syncException.compareAndSet(null, e);<a name="line.860"></a>
-<span class="sourceLineNo">861</span>          sendAbortProcessSignal();<a name="line.861"></a>
-<span class="sourceLineNo">862</span>          throw e;<a name="line.862"></a>
-<span class="sourceLineNo">863</span>        } catch (Throwable t) {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>          syncException.compareAndSet(null, t);<a name="line.864"></a>
-<span class="sourceLineNo">865</span>          sendAbortProcessSignal();<a name="line.865"></a>
-<span class="sourceLineNo">866</span>          throw t;<a name="line.866"></a>
-<span class="sourceLineNo">867</span>        } finally {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>          syncCond.signalAll();<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        }<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      }<a name="line.870"></a>
-<span class="sourceLineNo">871</span>    } finally {<a name="line.871"></a>
-<span class="sourceLineNo">872</span>      lock.unlock();<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    }<a name="line.873"></a>
-<span class="sourceLineNo">874</span>  }<a name="line.874"></a>
-<span class="sourceLineNo">875</span><a name="line.875"></a>
-<span class="sourceLineNo">876</span>  public ArrayList&lt;SyncMetrics&gt; getSyncMetrics() {<a name="line.876"></a>
-<span class="sourceLineNo">877</span>    lock.lock();<a name="line.877"></a>
-<span class="sourceLineNo">878</span>    try {<a name="line.878"></a>
-<span class="sourceLineNo">879</span>      return new ArrayList&lt;&gt;(syncMetricsQueue);<a name="line.879"></a>
-<span class="sourceLineNo">880</span>    } finally {<a name="line.880"></a>
-<span class="sourceLineNo">881</span>      lock.unlock();<a name="line.881"></a>
-<span class="sourceLineNo">882</span>    }<a name="line.882"></a>
-<span class="sourceLineNo">883</span>  }<a name="line.883"></a>
-<span class="sourceLineNo">884</span><a name="line.884"></a>
-<span class="sourceLineNo">885</span>  private long syncSlots() throws Throwable {<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    int retry = 0;<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    int logRolled = 0;<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    long totalSynced = 0;<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    do {<a name="line.889"></a>
-<span class="sourceLineNo">890</span>      try {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>        totalSynced = syncSlots(stream, slots, 0, slotIndex);<a name="line.891"></a>
-<span class="sourceLineNo">892</span>        break;<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      } catch (Throwable e) {<a name="line.893"></a>
-<span class="sourceLineNo">894</span>        LOG.warn("unable to sync slots, retry=" + retry);<a name="line.894"></a>
-<span class="sourceLineNo">895</span>        if (++retry &gt;= maxRetriesBeforeRoll) {<a name="line.895"></a>
-<span class="sourceLineNo">896</span>          if (logRolled &gt;= maxSyncFailureRoll &amp;&amp; isRunning()) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>            LOG.error("Sync slots after log roll failed, abort.", e);<a name="line.897"></a>
-<span class="sourceLineNo">898</span>            throw e;<a name="line.898"></a>
-<span class="sourceLineNo">899</span>          }<a name="line.899"></a>
-<span class="sourceLineNo">900</span><a name="line.900"></a>
-<span class="sourceLineNo">901</span>          if (!rollWriterWithRetries()) {<a name="line.901"></a>
-<span class="sourceLineNo">902</span>            throw e;<a name="line.902"></a>
-<span class="sourceLineNo">903</span>          }<a name="line.903"></a>
-<span class="sourceLineNo">904</span><a name="line.904"></a>
-<span class="sourceLineNo">905</span>          logRolled++;<a name="line.905"></a>
-<span class="sourceLineNo">906</span>          retry = 0;<a name="line.906"></a>
-<span class="sourceLineNo">907</span>        }<a name="line.907"></a>
-<span class="sourceLineNo">908</span>      }<a name="line.908"></a>
-<span class="sourceLineNo">909</span>    } while (isRunning());<a name="line.909"></a>
-<span class="sourceLineNo">910</span>    return totalSynced;<a name="line.910"></a>
-<span class="sourceLineNo">911</span>  }<a name="line.911"></a>
-<span class="sourceLineNo">912</span><a name="line.912"></a>
-<span class="sourceLineNo">913</span>  protected long syncSlots(final FSDataOutputStream stream, final ByteSlot[] slots,<a name="line.913"></a>
-<span class="sourceLineNo">914</span>      final int offset, final int count) throws IOException {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>    long totalSynced = 0;<a name="line.915"></a>
-<span class="sourceLineNo">916</span>    for (int i = 0; i &lt; count; ++i) {<a name="line.916"></a>
-<span class="sourceLineNo">917</span>      final ByteSlot data = slots[offset + i];<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      data.writeTo(stream);<a name="line.918"></a>
-<span class="sourceLineNo">919</span>      totalSynced += data.size();<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    }<a name="line.920"></a>
-<span class="sourceLineNo">921</span><a name="line.921"></a>
-<span class="sourceLineNo">922</span>    syncStream(stream);<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    sendPostSyncSignal();<a name="line.923"></a>
-<span class="sourceLineNo">924</span><a name="line.924"></a>
-<span class="sourceLineNo">925</span>    if (LOG.isTraceEnabled()) {<a name="line.925"></a>
-<span class="sourceLineNo">926</span>      LOG.trace("Sync slots=" + count + '/' + syncMaxSlot +<a name="line.926"></a>
-<span class="sourceLineNo">927</span>                ", flushed=" + StringUtils.humanSize(totalSynced));<a name="line.927"></a>
-<span class="sourceLineNo">928</span>    }<a name="line.928"></a>
-<span class="sourceLineNo">929</span>    return totalSynced;<a name="line.929"></a>
-<span class="sourceLineNo">930</span>  }<a name="line.930"></a>
-<span class="sourceLineNo">931</span><a name="line.931"></a>
-<span class="sourceLineNo">932</span>  protected void syncStream(final FSDataOutputStream stream) throws IOException {<a name="line.932"></a>
-<span class="sourceLineNo">933</span>    if (useHsync) {<a name="line.933"></a>
-<span class="sourceLineNo">934</span>      stream.hsync();<a name="line.934"></a>
-<span class="sourceLineNo">935</span>    } else {<a name="line.935"></a>
-<span class="sourceLineNo">936</span>      stream.hflush();<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    }<a name="line.937"></a>
-<span class="sourceLineNo">938</span>  }<a name="line.938"></a>
-<span class="sourceLineNo">939</span><a name="line.939"></a>
-<span class="sourceLineNo">940</span>  private boolean rollWriterWithRetries() {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    for (int i = 0; i &lt; rollRetries &amp;&amp; isRunning(); ++i) {<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      if (i &gt; 0) Threads.sleepWithoutInterrupt(waitBeforeRoll * i);<a name="line.942"></a>
-<span class="sourceLineNo">943</span><a name="line.943"></a>
-<span class="sourceLineNo">944</span>      try {<a name="line.944"></a>
-<span class="sourceLineNo">945</span>        if (rollWriter()) {<a name="line.945"></a>
-<span class="sourceLineNo">946</span>          return true;<a name="line.946"></a>
-<span class="sourceLineNo">947</span>        }<a name="line.947"></a>
-<span class="sourceLineNo">948</span>      } catch (IOException e) {<a name="line.948"></a>
-<span class="sourceLineNo">949</span>        LOG.warn("Unable to roll the log, attempt=" + (i + 1), e);<a name="line.949"></a>
-<span class="sourceLineNo">950</span>      }<a name="line.950"></a>
-<span class="sourceLineNo">951</span>    }<a name="line.951"></a>
-<span class="sourceLineNo">952</span>    LOG.error(HBaseMarkers.FATAL, "Unable to roll the log");<a name="line.952"></a>
-<span class="sourceLineNo">953</span>    return false;<a name="line.953"></a>
-<span class="sourceLineNo">954</span>  }<a name="line.954"></a>
-<span class="sourceLineNo">955</span><a name="line.955"></a>
-<span class="sourceLineNo">956</span>  private boolean tryRollWriter() {<a name="line.956"></a>
-<span class="sourceLineNo">957</span>    try {<a name="line.957"></a>
-<span class="sourceLineNo">958</span>      return rollWriter();<a name="line.958"></a>
-<span class="sourceLineNo">959</span>    } catch (IOException e) {<a name="line.959"></a>
-<span class="sourceLineNo">960</span>      LOG.warn("Unable to roll the log", e);<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      return false;<a name="line.961"></a>
-<span class="sourceLineNo">962</span>    }<a name="line.962"></a>
-<span class="sourceLineNo">963</span>  }<a name="line.963"></a>
-<span class="sourceLineNo">964</span><a name="line.964"></a>
-<span class="sourceLineNo">965</span>  public long getMillisToNextPeriodicRoll() {<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    if (lastRollTs.get() &gt; 0 &amp;&amp; periodicRollMsec &gt; 0) {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>      return periodicRollMsec - getMillisFromLastRoll();<a name="line.967"></a>
-<span class="sourceLineNo">968</span>    }<a name="line.968"></a>
-<span class="sourceLineNo">969</span>    return Long.MAX_VALUE;<a name="line.969"></a>
-<span class="sourceLineNo">970</span>  }<a name="line.970"></a>
-<span class="sourceLineNo">971</span><a name="line.971"></a>
-<span class="sourceLineNo">972</span>  public long getMillisFromLastRoll() {<a name="line.972"></a>
-<span class="sourceLineNo">973</span>    return (System.currentTimeMillis() - lastRollTs.get());<a name="line.973"></a>
-<span class="sourceLineNo">974</span>  }<a name="line.974"></a>
-<span class="sourceLineNo">975</span><a name="line.975"></a>
-<span class="sourceLineNo">976</span>  @VisibleForTesting<a name="line.976"></a>
-<span class="sourceLineNo">977</span>  void periodicRollForTesting() throws IOException {<a name="line.977"></a>
-<span class="sourceLineNo">978</span>    lock.lock();<a name="line.978"></a>
-<span class="sourceLineNo">979</span>    try {<a name="line.979"></a>
-<span class="sourceLineNo">980</span>      periodicRoll();<a name="line.980"></a>
-<span class="sourceLineNo">981</span>    } finally {<a name="line.981"></a>
-<span class="sourceLineNo">982</span>      lock.unlock();<a name="line.982"></a>
-<span class="sourceLineNo">983</span>    }<a name="line.983"></a>
-<span class="sourceLineNo">984</span>  }<a name="line.984"></a>
-<span class="sourceLineNo">985</span><a name="line.985"></a>
-<span class="sourceLineNo">986</span>  @VisibleForTesting<a name="line.986"></a>
-<span class="sourceLineNo">987</span>  public boolean rollWriterForTesting() throws IOException {<a name="line.987"></a>
-<span class="sourceLineNo">988</span>    lock.lock();<a name="line.988"></a>
-<span class="sourceLineNo">989</span>    try {<a name="line.989"></a>
-<span class="sourceLineNo">990</span>      return rollWriter();<a name="line.990"></a>
-<span class="sourceLineNo">991</span>    } finally {<a name="line.991"></a>
-<span class="sourceLineNo">992</span>      lock.unlock();<a name="line.992"></a>
-<span class="sourceLineNo">993</span>    }<a name="line.993"></a>
-<span class="sourceLineNo">994</span>  }<a name="line.994"></a>
-<span class="sourceLineNo">995</span><a name="line.995"></a>
-<span class="sourceLineNo">996</span>  @VisibleForTesting<a name="line.996"></a>
-<span class="sourceLineNo">997</span>  void removeInactiveLogsForTesting() throws Exception {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>    lock.lock();<a name="line.998"></a>
-<span class="sourceLineNo">999</span>    try {<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>      removeInactiveLogs();<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>    } finally  {<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>      lock.unlock();<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>    }<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>  }<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span><a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>  private void periodicRoll() throws IOException {<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>    if (storeTracker.isEmpty()) {<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>      LOG.trace("no active procedures");<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>      tryRollWriter();<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>      removeAllLogs(flushLogId - 1, "no active procedures");<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>    } else {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      if (storeTracker.isAllModified()) {<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>        LOG.trace("all the active procedures are in the latest log");<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>        removeAllLogs(flushLogId - 1, "all the active procedures are in the latest log");<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>      }<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span><a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>      // if the log size has exceeded the roll threshold<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>      // or the periodic roll timeout is expired, try to roll the wal.<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>      if (totalSynced.get() &gt; rollThreshold || getMillisToNextPeriodicRoll() &lt;= 0) {<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>        tryRollWriter();<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>      }<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span><a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>      removeInactiveLogs();<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>    }<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>  }<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>  private boolean rollWriter() throws IOException {<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    if (!isRunning()) {<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>      return false;<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    }<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span><a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>    // Create new state-log<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>    if (!rollWriter(flushLogId + 1)) {<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      LOG.warn("someone else has already created log {}", flushLogId);<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>      return false;<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>    }<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span><a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>    // We have the lease on the log,<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>    // but we should check if someone else has created new files<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>    if (getMaxLogId(getLogFiles()) &gt; flushLogId) {<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>      LOG.warn("Someone else created new logs. Expected maxLogId &lt; {}", flushLogId);<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>      logs.getLast().removeFile(this.walArchiveDir);<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>      return false;<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    }<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span><a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    // We have the lease on the log<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>    return true;<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>  }<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span><a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>  @VisibleForTesting<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>  boolean rollWriter(long logId) throws IOException {<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    assert logId &gt; flushLogId : "logId=" + logId + " flushLogId=" + flushLogId;<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    assert lock.isHeldByCurrentThread() : "expected to be the lock owner. " + lock.isLocked();<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span><a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    ProcedureWALHeader header = ProcedureWALHeader.newBuilder()<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>      .setVersion(ProcedureWALFormat.HEADER_VERSION)<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>      .setType(ProcedureWALFormat.LOG_TYPE_STREAM)<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>      .setMinProcId(storeTracker.getActiveMinProcId())<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      .setLogId(logId)<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      .build();<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span><a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    FSDataOutputStream newStream = null;<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>    Path newLogFile = null;<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    long startPos = -1;<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    newLogFile = getLogFilePath(logId);<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    try {<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>      newStream = CommonFSUtils.createForWal(fs, newLogFile, false);<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    } catch (FileAlreadyExistsException e) {<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>      LOG.error("Log file with id={} already exists", logId, e);<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>      return false;<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    } catch (RemoteException re) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      LOG.warn("failed to create log file with id={}", logId, re);<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>      return false;<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    }<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    // After we create the stream but before we attempt to use it at all<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    // ensure that we can provide the level of data safety we're configured<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    // to provide.<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>    final String durability = useHsync ? "hsync" : "hflush";<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    if (enforceStreamCapability &amp;&amp; !(CommonFSUtils.hasCapability(newStream, durability))) {<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>        throw new IllegalStateException("The procedure WAL relies on the ability to " + durability +<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>          " for proper operation during component failures, but the underlying filesystem does " +<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>          "not support doing so. Please check the config value of '" + USE_HSYNC_CONF_KEY +<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>          "' to set the desired level of robustness and ensure the config value of '" +<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>          CommonFSUtils.HBASE_WAL_DIR + "' points to a FileSystem mount that can provide it.");<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>    }<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    try {<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>      ProcedureWALFormat.writeHeader(newStream, header);<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>      startPos = newStream.getPos();<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    } catch (IOException ioe) {<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>      LOG.warn("Encountered exception writing header", ioe);<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>      newStream.close();<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      return false;<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>    }<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span><a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    closeCurrentLogStream(false);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span><a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>    storeTracker.resetModified();<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>    stream = newStream;<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>    flushLogId = logId;<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>    totalSynced.set(0);<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    long rollTs = System.currentTimeMillis();<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    lastRollTs.set(rollTs);<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    logs.add(new ProcedureWALFile(fs, newLogFile, header, startPos, rollTs));<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span><a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    // if it's the first next WAL being added, build the holding cleanup tracker<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    if (logs.size() == 2) {<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>      buildHoldingCleanupTracker();<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    } else if (logs.size() &gt; walCountWarnThreshold) {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      LOG.warn("procedure WALs count={} above the warning threshold {}. check running procedures" +<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>        " to see if something is stuck.", logs.size(), walCountWarnThreshold);<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>      // This is just like what we have done at RS side when there are too many wal files. For RS,<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>      // if there are too many wal files, we will find out the wal entries in the oldest file, and<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>      // tell the upper layer to flush these regions so the wal entries will be useless and then we<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>      // can delete the wal file. For WALProcedureStore, the assumption is that, if all the<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>      // procedures recorded in a proc wal file are modified or deleted in a new proc wal file, then<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>      // we are safe to delete it. So here if there are too many proc wal files, we will find out<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>      // the procedure ids in the oldest file, which are neither modified nor deleted in newer proc<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>      // wal files, and tell upper layer to update the state of these procedures to the newest proc<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>      // wal file(by calling ProcedureStore.update), then we are safe to delete the oldest proc wal<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>      // file.<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>      sendForceUpdateSignal(holdingCleanupTracker.getAllActiveProcIds());<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>    }<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span><a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>    LOG.info("Rolled new Procedure Store WAL, id={}", logId);<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    return true;<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>  }<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span><a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>  private void closeCurrentLogStream(boolean abort) {<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    if (stream == null || logs.isEmpty()) {<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>      return;<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>    try {<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>      ProcedureWALFile log = logs.getLast();<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>      log.setProcIds(storeTracker.getModifiedMinProcId(), storeTracker.getModifiedMaxProcId());<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>      log.updateLocalTracker(storeTracker);<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>      if (!abort) {<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>        long trailerSize = ProcedureWALFormat.writeTrailer(stream, storeTracker);<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>        log.addToSize(trailerSize);<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>      }<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>    } catch (IOException e) {<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>      LOG.warn("Unable to write the trailer", e);<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    }<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>    try {<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>      stream.close();<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    } catch (IOException e) {<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>      LOG.error("Unable to close the stream", e);<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>    }<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    stream = null;<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>  }<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span><a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>  // ==========================================================================<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>  //  Log Files cleaner helpers<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>  // ==========================================================================<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>  private void removeInactiveLogs() throws IOException {<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>    // We keep track of which procedures are holding the oldest WAL in 'holdingCleanupTracker'.<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    // once there is nothing olding the oldest WAL we can remove it.<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>    while (logs.size() &gt; 1 &amp;&amp; holdingCleanupTracker.isEmpty()) {<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>      LOG.info("Remove the oldest log {}", logs.getFirst());<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      removeLogFile(logs.getFirst(), walArchiveDir);<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>      buildHoldingCleanupTracker();<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>    }<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span><a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>    // TODO: In case we are holding up a lot of logs for long time we should<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    // rewrite old procedures (in theory parent procs) to the new WAL.<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>  }<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span><a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>  private void buildHoldingCleanupTracker() {<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    if (logs.size() &lt;= 1) {<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>      // we only have one wal, so nothing to do<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>      holdingCleanupTracker.reset();<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>      return;<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    }<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span><a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    // compute the holding tracker.<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>    // - the first WAL is used for the 'updates'<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    // - the global tracker will be used to determine whether a procedure has been deleted<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>    // - other trackers will be used to determine whether a procedure has been updated, as a deleted<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    // procedure can always be detected by checking the global tracker, we can save the deleted<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>    // checks when applying other trackers<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>    holdingCleanupTracker.resetTo(logs.getFirst().getTracker(), true);<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>    holdingCleanupTracker.setDeletedIfDeletedByThem(storeTracker);<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>    // the logs is a linked list, so avoid calling get(index) on it.<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>    Iterator&lt;ProcedureWALFile&gt; iter = logs.iterator();<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    // skip the tracker for the first file when creating the iterator.<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    iter.next();<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>    ProcedureStoreTracker tracker = iter.next().getTracker();<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>    // testing iter.hasNext after calling iter.next to skip applying the tracker for last file,<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>    // which is just the storeTracker above.<a name="line.1189

<TRUNCATED>

[15/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html
index a87bdc6..af595f3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html
@@ -6,7 +6,7 @@
 </head>
 <body>
 <div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
+<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>
@@ -23,425 +23,416 @@
 <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><a name="line.18"></a>
-<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.master.procedure;<a name="line.19"></a>
-<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.ArrayList;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.List;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.Cell;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.HConstants;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.TableName;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.client.Get;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.client.Result;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.client.Table;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.master.MasterCoprocessorHost;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.master.TableStateManager;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.slf4j.Logger;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.slf4j.LoggerFactory;<a name="line.43"></a>
-<span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.EnableTableState;<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>@InterfaceAudience.Private<a name="line.49"></a>
-<span class="sourceLineNo">050</span>public class EnableTableProcedure<a name="line.50"></a>
-<span class="sourceLineNo">051</span>    extends AbstractStateMachineTableProcedure&lt;EnableTableState&gt; {<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  private static final Logger LOG = LoggerFactory.getLogger(EnableTableProcedure.class);<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span>  private TableName tableName;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private boolean skipTableStateCheck;<a name="line.55"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master.procedure;<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.util.ArrayList;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.List;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.Cell;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.HConstants;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.TableName;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.client.Get;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.client.Result;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.client.Table;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.master.MasterCoprocessorHost;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.master.TableStateManager;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.slf4j.Logger;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.slf4j.LoggerFactory;<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.EnableTableState;<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>@InterfaceAudience.Private<a name="line.48"></a>
+<span class="sourceLineNo">049</span>public class EnableTableProcedure<a name="line.49"></a>
+<span class="sourceLineNo">050</span>    extends AbstractStateMachineTableProcedure&lt;EnableTableState&gt; {<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  private static final Logger LOG = LoggerFactory.getLogger(EnableTableProcedure.class);<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private TableName tableName;<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>  private Boolean traceEnabled = null;<a name="line.55"></a>
 <span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span>  private Boolean traceEnabled = null;<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>  public EnableTableProcedure() {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    super();<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  }<a name="line.61"></a>
-<span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span>  /**<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   * Constructor<a name="line.64"></a>
-<span class="sourceLineNo">065</span>   * @param env MasterProcedureEnv<a name="line.65"></a>
-<span class="sourceLineNo">066</span>   * @param tableName the table to operate on<a name="line.66"></a>
-<span class="sourceLineNo">067</span>   * @param skipTableStateCheck whether to check table state<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  public EnableTableProcedure(final MasterProcedureEnv env, final TableName tableName,<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      final boolean skipTableStateCheck) {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    this(env, tableName, skipTableStateCheck, null);<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  /**<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * Constructor<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * @param env MasterProcedureEnv<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * @param tableName the table to operate on<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * @param skipTableStateCheck whether to check table state<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   */<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  public EnableTableProcedure(final MasterProcedureEnv env, final TableName tableName,<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      final boolean skipTableStateCheck, final ProcedurePrepareLatch syncLatch) {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    super(env, syncLatch);<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    this.tableName = tableName;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    this.skipTableStateCheck = skipTableStateCheck;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  }<a name="line.85"></a>
+<span class="sourceLineNo">057</span>  public EnableTableProcedure() {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  }<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  /**<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * Constructor<a name="line.61"></a>
+<span class="sourceLineNo">062</span>   * @param env MasterProcedureEnv<a name="line.62"></a>
+<span class="sourceLineNo">063</span>   * @param tableName the table to operate on<a name="line.63"></a>
+<span class="sourceLineNo">064</span>   */<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  public EnableTableProcedure(MasterProcedureEnv env, TableName tableName) {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    this(env, tableName, null);<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  }<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>  /**<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   * Constructor<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   * @param env MasterProcedureEnv<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   * @param tableName the table to operate on<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   */<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  public EnableTableProcedure(MasterProcedureEnv env, TableName tableName,<a name="line.74"></a>
+<span class="sourceLineNo">075</span>      ProcedurePrepareLatch syncLatch) {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    super(env, syncLatch);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    this.tableName = tableName;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  @Override<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  protected Flow executeFromState(final MasterProcedureEnv env, final EnableTableState state)<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      throws InterruptedException {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    if (isTraceEnabled()) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      LOG.trace(this + " execute state=" + state);<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>  @Override<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  protected Flow executeFromState(final MasterProcedureEnv env, final EnableTableState state)<a name="line.88"></a>
-<span class="sourceLineNo">089</span>      throws InterruptedException {<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    if (isTraceEnabled()) {<a name="line.90"></a>
-<span class="sourceLineNo">091</span>      LOG.trace(this + " execute state=" + state);<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    }<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>    try {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>      switch (state) {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>        case ENABLE_TABLE_PREPARE:<a name="line.96"></a>
-<span class="sourceLineNo">097</span>          if (prepareEnable(env)) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>            setNextState(EnableTableState.ENABLE_TABLE_PRE_OPERATION);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>          } else {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>            assert isFailed() : "enable should have an exception here";<a name="line.100"></a>
-<span class="sourceLineNo">101</span>            return Flow.NO_MORE_STATE;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>          }<a name="line.102"></a>
-<span class="sourceLineNo">103</span>          break;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>        case ENABLE_TABLE_PRE_OPERATION:<a name="line.104"></a>
-<span class="sourceLineNo">105</span>          preEnable(env, state);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>          setNextState(EnableTableState.ENABLE_TABLE_SET_ENABLING_TABLE_STATE);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>          break;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        case ENABLE_TABLE_SET_ENABLING_TABLE_STATE:<a name="line.108"></a>
-<span class="sourceLineNo">109</span>          setTableStateToEnabling(env, tableName);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>          setNextState(EnableTableState.ENABLE_TABLE_MARK_REGIONS_ONLINE);<a name="line.110"></a>
-<span class="sourceLineNo">111</span>          break;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>        case ENABLE_TABLE_MARK_REGIONS_ONLINE:<a name="line.112"></a>
-<span class="sourceLineNo">113</span>          Connection connection = env.getMasterServices().getConnection();<a name="line.113"></a>
-<span class="sourceLineNo">114</span>          // we will need to get the tableDescriptor here to see if there is a change in the replica<a name="line.114"></a>
-<span class="sourceLineNo">115</span>          // count<a name="line.115"></a>
-<span class="sourceLineNo">116</span>          TableDescriptor hTableDescriptor =<a name="line.116"></a>
-<span class="sourceLineNo">117</span>              env.getMasterServices().getTableDescriptors().get(tableName);<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>          // Get the replica count<a name="line.119"></a>
-<span class="sourceLineNo">120</span>          int regionReplicaCount = hTableDescriptor.getRegionReplication();<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>          // Get the regions for the table from memory; get both online and offline regions<a name="line.122"></a>
-<span class="sourceLineNo">123</span>          // ('true').<a name="line.123"></a>
-<span class="sourceLineNo">124</span>          List&lt;RegionInfo&gt; regionsOfTable =<a name="line.124"></a>
-<span class="sourceLineNo">125</span>              env.getAssignmentManager().getRegionStates().getRegionsOfTable(tableName, true);<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>          int currentMaxReplica = 0;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>          // Check if the regions in memory have replica regions as marked in META table<a name="line.128"></a>
-<span class="sourceLineNo">129</span>          for (RegionInfo regionInfo : regionsOfTable) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>            if (regionInfo.getReplicaId() &gt; currentMaxReplica) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>              // Iterating through all the list to identify the highest replicaID region.<a name="line.131"></a>
-<span class="sourceLineNo">132</span>              // We can stop after checking with the first set of regions??<a name="line.132"></a>
-<span class="sourceLineNo">133</span>              currentMaxReplica = regionInfo.getReplicaId();<a name="line.133"></a>
-<span class="sourceLineNo">134</span>            }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>          }<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>          // read the META table to know the actual number of replicas for the table - if there<a name="line.137"></a>
-<span class="sourceLineNo">138</span>          // was a table modification on region replica then this will reflect the new entries also<a name="line.138"></a>
-<span class="sourceLineNo">139</span>          int replicasFound =<a name="line.139"></a>
-<span class="sourceLineNo">140</span>              getNumberOfReplicasFromMeta(connection, regionReplicaCount, regionsOfTable);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>          assert regionReplicaCount - 1 == replicasFound;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>          LOG.info(replicasFound + " META entries added for the given regionReplicaCount "<a name="line.142"></a>
-<span class="sourceLineNo">143</span>              + regionReplicaCount + " for the table " + tableName.getNameAsString());<a name="line.143"></a>
-<span class="sourceLineNo">144</span>          if (currentMaxReplica == (regionReplicaCount - 1)) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>            if (LOG.isDebugEnabled()) {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>              LOG.debug("There is no change to the number of region replicas."<a name="line.146"></a>
-<span class="sourceLineNo">147</span>                  + " Assigning the available regions." + " Current and previous"<a name="line.147"></a>
-<span class="sourceLineNo">148</span>                  + "replica count is " + regionReplicaCount);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>            }<a name="line.149"></a>
-<span class="sourceLineNo">150</span>          } else if (currentMaxReplica &gt; (regionReplicaCount - 1)) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>            // we have additional regions as the replica count has been decreased. Delete<a name="line.151"></a>
-<span class="sourceLineNo">152</span>            // those regions because already the table is in the unassigned state<a name="line.152"></a>
-<span class="sourceLineNo">153</span>            LOG.info("The number of replicas " + (currentMaxReplica + 1)<a name="line.153"></a>
-<span class="sourceLineNo">154</span>                + "  is more than the region replica count " + regionReplicaCount);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>            List&lt;RegionInfo&gt; copyOfRegions = new ArrayList&lt;RegionInfo&gt;(regionsOfTable);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>            for (RegionInfo regionInfo : copyOfRegions) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>              if (regionInfo.getReplicaId() &gt; (regionReplicaCount - 1)) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>                // delete the region from the regionStates<a name="line.158"></a>
-<span class="sourceLineNo">159</span>                env.getAssignmentManager().getRegionStates().deleteRegion(regionInfo);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>                // remove it from the list of regions of the table<a name="line.160"></a>
-<span class="sourceLineNo">161</span>                LOG.info("The regioninfo being removed is " + regionInfo + " "<a name="line.161"></a>
-<span class="sourceLineNo">162</span>                    + regionInfo.getReplicaId());<a name="line.162"></a>
-<span class="sourceLineNo">163</span>                regionsOfTable.remove(regionInfo);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>              }<a name="line.164"></a>
-<span class="sourceLineNo">165</span>            }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>          } else {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>            // the replicasFound is less than the regionReplication<a name="line.167"></a>
-<span class="sourceLineNo">168</span>            LOG.info("The number of replicas has been changed(increased)."<a name="line.168"></a>
-<span class="sourceLineNo">169</span>                + " Lets assign the new region replicas. The previous replica count was "<a name="line.169"></a>
-<span class="sourceLineNo">170</span>                + (currentMaxReplica + 1) + ". The current replica count is " + regionReplicaCount);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>            regionsOfTable = RegionReplicaUtil.addReplicas(hTableDescriptor, regionsOfTable,<a name="line.171"></a>
-<span class="sourceLineNo">172</span>              currentMaxReplica + 1, regionReplicaCount);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>          }<a name="line.173"></a>
-<span class="sourceLineNo">174</span>          // Assign all the table regions. (including region replicas if added).<a name="line.174"></a>
-<span class="sourceLineNo">175</span>          // createAssignProcedure will try to retain old assignments if possible.<a name="line.175"></a>
-<span class="sourceLineNo">176</span>          addChildProcedure(env.getAssignmentManager().createAssignProcedures(regionsOfTable));<a name="line.176"></a>
-<span class="sourceLineNo">177</span>          setNextState(EnableTableState.ENABLE_TABLE_SET_ENABLED_TABLE_STATE);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>          break;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        case ENABLE_TABLE_SET_ENABLED_TABLE_STATE:<a name="line.179"></a>
-<span class="sourceLineNo">180</span>          setTableStateToEnabled(env, tableName);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>          setNextState(EnableTableState.ENABLE_TABLE_POST_OPERATION);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>          break;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>        case ENABLE_TABLE_POST_OPERATION:<a name="line.183"></a>
-<span class="sourceLineNo">184</span>          postEnable(env, state);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>          return Flow.NO_MORE_STATE;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>        default:<a name="line.186"></a>
-<span class="sourceLineNo">187</span>          throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.187"></a>
+<span class="sourceLineNo">087</span>    try {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      switch (state) {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>        case ENABLE_TABLE_PREPARE:<a name="line.89"></a>
+<span class="sourceLineNo">090</span>          if (prepareEnable(env)) {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>            setNextState(EnableTableState.ENABLE_TABLE_PRE_OPERATION);<a name="line.91"></a>
+<span class="sourceLineNo">092</span>          } else {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>            assert isFailed() : "enable should have an exception here";<a name="line.93"></a>
+<span class="sourceLineNo">094</span>            return Flow.NO_MORE_STATE;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>          }<a name="line.95"></a>
+<span class="sourceLineNo">096</span>          break;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>        case ENABLE_TABLE_PRE_OPERATION:<a name="line.97"></a>
+<span class="sourceLineNo">098</span>          preEnable(env, state);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>          setNextState(EnableTableState.ENABLE_TABLE_SET_ENABLING_TABLE_STATE);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>          break;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>        case ENABLE_TABLE_SET_ENABLING_TABLE_STATE:<a name="line.101"></a>
+<span class="sourceLineNo">102</span>          setTableStateToEnabling(env, tableName);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>          setNextState(EnableTableState.ENABLE_TABLE_MARK_REGIONS_ONLINE);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>          break;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>        case ENABLE_TABLE_MARK_REGIONS_ONLINE:<a name="line.105"></a>
+<span class="sourceLineNo">106</span>          Connection connection = env.getMasterServices().getConnection();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>          // we will need to get the tableDescriptor here to see if there is a change in the replica<a name="line.107"></a>
+<span class="sourceLineNo">108</span>          // count<a name="line.108"></a>
+<span class="sourceLineNo">109</span>          TableDescriptor hTableDescriptor =<a name="line.109"></a>
+<span class="sourceLineNo">110</span>              env.getMasterServices().getTableDescriptors().get(tableName);<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>          // Get the replica count<a name="line.112"></a>
+<span class="sourceLineNo">113</span>          int regionReplicaCount = hTableDescriptor.getRegionReplication();<a name="line.113"></a>
+<span class="sourceLineNo">114</span><a name="line.114"></a>
+<span class="sourceLineNo">115</span>          // Get the regions for the table from memory; get both online and offline regions<a name="line.115"></a>
+<span class="sourceLineNo">116</span>          // ('true').<a name="line.116"></a>
+<span class="sourceLineNo">117</span>          List&lt;RegionInfo&gt; regionsOfTable =<a name="line.117"></a>
+<span class="sourceLineNo">118</span>              env.getAssignmentManager().getRegionStates().getRegionsOfTable(tableName, true);<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>          int currentMaxReplica = 0;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>          // Check if the regions in memory have replica regions as marked in META table<a name="line.121"></a>
+<span class="sourceLineNo">122</span>          for (RegionInfo regionInfo : regionsOfTable) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>            if (regionInfo.getReplicaId() &gt; currentMaxReplica) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>              // Iterating through all the list to identify the highest replicaID region.<a name="line.124"></a>
+<span class="sourceLineNo">125</span>              // We can stop after checking with the first set of regions??<a name="line.125"></a>
+<span class="sourceLineNo">126</span>              currentMaxReplica = regionInfo.getReplicaId();<a name="line.126"></a>
+<span class="sourceLineNo">127</span>            }<a name="line.127"></a>
+<span class="sourceLineNo">128</span>          }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>          // read the META table to know the actual number of replicas for the table - if there<a name="line.130"></a>
+<span class="sourceLineNo">131</span>          // was a table modification on region replica then this will reflect the new entries also<a name="line.131"></a>
+<span class="sourceLineNo">132</span>          int replicasFound =<a name="line.132"></a>
+<span class="sourceLineNo">133</span>              getNumberOfReplicasFromMeta(connection, regionReplicaCount, regionsOfTable);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>          assert regionReplicaCount - 1 == replicasFound;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>          LOG.info(replicasFound + " META entries added for the given regionReplicaCount "<a name="line.135"></a>
+<span class="sourceLineNo">136</span>              + regionReplicaCount + " for the table " + tableName.getNameAsString());<a name="line.136"></a>
+<span class="sourceLineNo">137</span>          if (currentMaxReplica == (regionReplicaCount - 1)) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>            if (LOG.isDebugEnabled()) {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>              LOG.debug("There is no change to the number of region replicas."<a name="line.139"></a>
+<span class="sourceLineNo">140</span>                  + " Assigning the available regions." + " Current and previous"<a name="line.140"></a>
+<span class="sourceLineNo">141</span>                  + "replica count is " + regionReplicaCount);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>            }<a name="line.142"></a>
+<span class="sourceLineNo">143</span>          } else if (currentMaxReplica &gt; (regionReplicaCount - 1)) {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>            // we have additional regions as the replica count has been decreased. Delete<a name="line.144"></a>
+<span class="sourceLineNo">145</span>            // those regions because already the table is in the unassigned state<a name="line.145"></a>
+<span class="sourceLineNo">146</span>            LOG.info("The number of replicas " + (currentMaxReplica + 1)<a name="line.146"></a>
+<span class="sourceLineNo">147</span>                + "  is more than the region replica count " + regionReplicaCount);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>            List&lt;RegionInfo&gt; copyOfRegions = new ArrayList&lt;RegionInfo&gt;(regionsOfTable);<a name="line.148"></a>
+<span class="sourceLineNo">149</span>            for (RegionInfo regionInfo : copyOfRegions) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>              if (regionInfo.getReplicaId() &gt; (regionReplicaCount - 1)) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>                // delete the region from the regionStates<a name="line.151"></a>
+<span class="sourceLineNo">152</span>                env.getAssignmentManager().getRegionStates().deleteRegion(regionInfo);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>                // remove it from the list of regions of the table<a name="line.153"></a>
+<span class="sourceLineNo">154</span>                LOG.info("The regioninfo being removed is " + regionInfo + " "<a name="line.154"></a>
+<span class="sourceLineNo">155</span>                    + regionInfo.getReplicaId());<a name="line.155"></a>
+<span class="sourceLineNo">156</span>                regionsOfTable.remove(regionInfo);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>              }<a name="line.157"></a>
+<span class="sourceLineNo">158</span>            }<a name="line.158"></a>
+<span class="sourceLineNo">159</span>          } else {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>            // the replicasFound is less than the regionReplication<a name="line.160"></a>
+<span class="sourceLineNo">161</span>            LOG.info("The number of replicas has been changed(increased)."<a name="line.161"></a>
+<span class="sourceLineNo">162</span>                + " Lets assign the new region replicas. The previous replica count was "<a name="line.162"></a>
+<span class="sourceLineNo">163</span>                + (currentMaxReplica + 1) + ". The current replica count is " + regionReplicaCount);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>            regionsOfTable = RegionReplicaUtil.addReplicas(hTableDescriptor, regionsOfTable,<a name="line.164"></a>
+<span class="sourceLineNo">165</span>              currentMaxReplica + 1, regionReplicaCount);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>          }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>          // Assign all the table regions. (including region replicas if added).<a name="line.167"></a>
+<span class="sourceLineNo">168</span>          // createAssignProcedure will try to retain old assignments if possible.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>          addChildProcedure(env.getAssignmentManager().createAssignProcedures(regionsOfTable));<a name="line.169"></a>
+<span class="sourceLineNo">170</span>          setNextState(EnableTableState.ENABLE_TABLE_SET_ENABLED_TABLE_STATE);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>          break;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>        case ENABLE_TABLE_SET_ENABLED_TABLE_STATE:<a name="line.172"></a>
+<span class="sourceLineNo">173</span>          setTableStateToEnabled(env, tableName);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>          setNextState(EnableTableState.ENABLE_TABLE_POST_OPERATION);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>          break;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        case ENABLE_TABLE_POST_OPERATION:<a name="line.176"></a>
+<span class="sourceLineNo">177</span>          postEnable(env, state);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>          return Flow.NO_MORE_STATE;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>        default:<a name="line.179"></a>
+<span class="sourceLineNo">180</span>          throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      }<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    } catch (IOException e) {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      if (isRollbackSupported(state)) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        setFailure("master-enable-table", e);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      } else {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>        LOG.warn(<a name="line.186"></a>
+<span class="sourceLineNo">187</span>          "Retriable error trying to enable table=" + tableName + " (in state=" + state + ")", e);<a name="line.187"></a>
 <span class="sourceLineNo">188</span>      }<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    } catch (IOException e) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      if (isRollbackSupported(state)) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        setFailure("master-enable-table", e);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      } else {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        LOG.warn(<a name="line.193"></a>
-<span class="sourceLineNo">194</span>          "Retriable error trying to enable table=" + tableName + " (in state=" + state + ")", e);<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      }<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    return Flow.HAS_MORE_STATE;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  }<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>  private int getNumberOfReplicasFromMeta(Connection connection, int regionReplicaCount,<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      List&lt;RegionInfo&gt; regionsOfTable) throws IOException {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    Result r = getRegionFromMeta(connection, regionsOfTable);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    int replicasFound = 0;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    for (int i = 1; i &lt; regionReplicaCount; i++) {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      // Since we have already added the entries to the META we will be getting only that here<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      List&lt;Cell&gt; columnCells =<a name="line.206"></a>
-<span class="sourceLineNo">207</span>          r.getColumnCells(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      if (!columnCells.isEmpty()) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        replicasFound++;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      }<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    return replicasFound;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  private Result getRegionFromMeta(Connection connection, List&lt;RegionInfo&gt; regionsOfTable)<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      throws IOException {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    byte[] metaKeyForRegion = MetaTableAccessor.getMetaKeyForRegion(regionsOfTable.get(0));<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    Get get = new Get(metaKeyForRegion);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    get.addFamily(HConstants.CATALOG_FAMILY);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    Table metaTable = MetaTableAccessor.getMetaHTable(connection);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    Result r = metaTable.get(get);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    return r;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  }<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>  @Override<a name="line.225"></a>
-<span class="sourceLineNo">226</span>  protected void rollbackState(final MasterProcedureEnv env, final EnableTableState state)<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      throws IOException {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    // nothing to rollback, prepare-disable is just table-state checks.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    // We can fail if the table does not exist or is not disabled.<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    switch (state) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      case ENABLE_TABLE_PRE_OPERATION:<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        return;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      case ENABLE_TABLE_PREPARE:<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        releaseSyncLatch();<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        return;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      default:<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        break;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>    // The delete doesn't have a rollback. The execution will succeed, at some point.<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>  @Override<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  protected boolean isRollbackSupported(final EnableTableState state) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    switch (state) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      case ENABLE_TABLE_PREPARE:<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      case ENABLE_TABLE_PRE_OPERATION:<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        return true;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      default:<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        return false;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    }<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  }<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>  @Override<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  protected EnableTableState getState(final int stateId) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    return EnableTableState.forNumber(stateId);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  }<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>  @Override<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  protected int getStateId(final EnableTableState state) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    return state.getNumber();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>  @Override<a name="line.265"></a>
-<span class="sourceLineNo">266</span>  protected EnableTableState getInitialState() {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    return EnableTableState.ENABLE_TABLE_PREPARE;<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>  @Override<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      throws IOException {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    super.serializeStateData(serializer);<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>    MasterProcedureProtos.EnableTableStateData.Builder enableTableMsg =<a name="line.275"></a>
-<span class="sourceLineNo">276</span>        MasterProcedureProtos.EnableTableStateData.newBuilder()<a name="line.276"></a>
-<span class="sourceLineNo">277</span>            .setUserInfo(MasterProcedureUtil.toProtoUserInfo(getUser()))<a name="line.277"></a>
-<span class="sourceLineNo">278</span>            .setTableName(ProtobufUtil.toProtoTableName(tableName))<a name="line.278"></a>
-<span class="sourceLineNo">279</span>            .setSkipTableStateCheck(skipTableStateCheck);<a name="line.279"></a>
+<span class="sourceLineNo">189</span>    }<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    return Flow.HAS_MORE_STATE;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>  private int getNumberOfReplicasFromMeta(Connection connection, int regionReplicaCount,<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      List&lt;RegionInfo&gt; regionsOfTable) throws IOException {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    Result r = getRegionFromMeta(connection, regionsOfTable);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    int replicasFound = 0;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    for (int i = 1; i &lt; regionReplicaCount; i++) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      // Since we have already added the entries to the META we will be getting only that here<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      List&lt;Cell&gt; columnCells =<a name="line.199"></a>
+<span class="sourceLineNo">200</span>          r.getColumnCells(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      if (!columnCells.isEmpty()) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        replicasFound++;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    return replicasFound;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>  private Result getRegionFromMeta(Connection connection, List&lt;RegionInfo&gt; regionsOfTable)<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      throws IOException {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    byte[] metaKeyForRegion = MetaTableAccessor.getMetaKeyForRegion(regionsOfTable.get(0));<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    Get get = new Get(metaKeyForRegion);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    get.addFamily(HConstants.CATALOG_FAMILY);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    Table metaTable = MetaTableAccessor.getMetaHTable(connection);<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    Result r = metaTable.get(get);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    return r;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  }<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span>  @Override<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  protected void rollbackState(final MasterProcedureEnv env, final EnableTableState state)<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      throws IOException {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    // nothing to rollback, prepare-disable is just table-state checks.<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    // We can fail if the table does not exist or is not disabled.<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    switch (state) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      case ENABLE_TABLE_PRE_OPERATION:<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        return;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      case ENABLE_TABLE_PREPARE:<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        releaseSyncLatch();<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        return;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      default:<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        break;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>    // The delete doesn't have a rollback. The execution will succeed, at some point.<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  }<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span>  @Override<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  protected boolean isRollbackSupported(final EnableTableState state) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    switch (state) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      case ENABLE_TABLE_PREPARE:<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      case ENABLE_TABLE_PRE_OPERATION:<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        return true;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      default:<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        return false;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    }<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>  @Override<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  protected EnableTableState getState(final int stateId) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    return EnableTableState.forNumber(stateId);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>  }<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span>  @Override<a name="line.253"></a>
+<span class="sourceLineNo">254</span>  protected int getStateId(final EnableTableState state) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    return state.getNumber();<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  }<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>  @Override<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  protected EnableTableState getInitialState() {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    return EnableTableState.ENABLE_TABLE_PREPARE;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>  }<a name="line.261"></a>
+<span class="sourceLineNo">262</span><a name="line.262"></a>
+<span class="sourceLineNo">263</span>  @Override<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    super.serializeStateData(serializer);<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>    // the skipTableStateCheck is false so we still need to set it...<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    @SuppressWarnings("deprecation")<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    MasterProcedureProtos.EnableTableStateData.Builder enableTableMsg =<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      MasterProcedureProtos.EnableTableStateData.newBuilder()<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        .setUserInfo(MasterProcedureUtil.toProtoUserInfo(getUser()))<a name="line.271"></a>
+<span class="sourceLineNo">272</span>        .setTableName(ProtobufUtil.toProtoTableName(tableName)).setSkipTableStateCheck(false);<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span>    serializer.serialize(enableTableMsg.build());<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  }<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>  @Override<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    super.deserializeStateData(serializer);<a name="line.279"></a>
 <span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>    serializer.serialize(enableTableMsg.build());<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>  @Override<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      throws IOException {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    super.deserializeStateData(serializer);<a name="line.287"></a>
-<span class="sourceLineNo">288</span><a name="line.288"></a>
-<span class="sourceLineNo">289</span>    MasterProcedureProtos.EnableTableStateData enableTableMsg =<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        serializer.deserialize(MasterProcedureProtos.EnableTableStateData.class);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    setUser(MasterProcedureUtil.toUserInfo(enableTableMsg.getUserInfo()));<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    tableName = ProtobufUtil.toTableName(enableTableMsg.getTableName());<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    skipTableStateCheck = enableTableMsg.getSkipTableStateCheck();<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  }<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>  @Override<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  public TableName getTableName() {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    return tableName;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  }<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>  @Override<a name="line.301"></a>
-<span class="sourceLineNo">302</span>  public TableOperationType getTableOperationType() {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    return TableOperationType.ENABLE;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  }<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span>  /**<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   * Action before any real action of enabling table. Set the exception in the procedure instead<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * of throwing it.  This approach is to deal with backward compatible with 1.0.<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * @param env MasterProcedureEnv<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @return whether the table passes the necessary checks<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * @throws IOException<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   */<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  private boolean prepareEnable(final MasterProcedureEnv env) throws IOException {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    boolean canTableBeEnabled = true;<a name="line.315"></a>
-<span class="sourceLineNo">316</span><a name="line.316"></a>
-<span class="sourceLineNo">317</span>    // Check whether table exists<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    if (!MetaTableAccessor.tableExists(env.getMasterServices().getConnection(), tableName)) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      setFailure("master-enable-table", new TableNotFoundException(tableName));<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      canTableBeEnabled = false;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    } else if (!skipTableStateCheck) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      // There could be multiple client requests trying to disable or enable<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      // the table at the same time. Ensure only the first request is honored<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      // After that, no other requests can be accepted until the table reaches<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      // DISABLED or ENABLED.<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      //<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      // Note: in 1.0 release, we called TableStateManager.setTableStateIfInStates() to set<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      // the state to ENABLING from DISABLED. The implementation was done before table lock<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      // was implemented. With table lock, there is no need to set the state here (it will<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      // set the state later on). A quick state check should be enough for us to move forward.<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      TableStateManager tsm = env.getMasterServices().getTableStateManager();<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      TableState ts = tsm.getTableState(tableName);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      if(!ts.isDisabled()){<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        LOG.info("Not DISABLED tableState={}; skipping enable; {}", ts.getState(), this);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>        setFailure("master-enable-table", new TableNotDisabledException(ts.toString()));<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        canTableBeEnabled = false;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      }<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    }<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    // We are done the check. Future actions in this procedure could be done asynchronously.<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    releaseSyncLatch();<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>    return canTableBeEnabled;<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>  /**<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   * Action before enabling table.<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   * @param env MasterProcedureEnv<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * @param state the procedure state<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * @throws IOException<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @throws InterruptedException<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   */<a name="line.352"></a>
-<span class="sourceLineNo">353</span>  private void preEnable(final MasterProcedureEnv env, final EnableTableState state)<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      throws IOException, InterruptedException {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    runCoprocessorAction(env, state);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  }<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>  /**<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * Mark table state to Enabling<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * @param env MasterProcedureEnv<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   * @param tableName the target table<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   * @throws IOException<a name="line.362"></a>
-<span class="sourceLineNo">363</span>   */<a name="line.363"></a>
-<span class="sourceLineNo">364</span>  protected static void setTableStateToEnabling(<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      final MasterProcedureEnv env,<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      final TableName tableName) throws IOException {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    // Set table disabling flag up in zk.<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    LOG.info("Attempting to enable the table " + tableName);<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    env.getMasterServices().getTableStateManager().setTableState(<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      tableName,<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      TableState.State.ENABLING);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>  }<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span>  /**<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * Mark table state to Enabled<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   * @param env MasterProcedureEnv<a name="line.376"></a>
-<span class="sourceLineNo">377</span>   * @throws IOException<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   */<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  protected static void setTableStateToEnabled(<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      final MasterProcedureEnv env,<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      final TableName tableName) throws IOException {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    // Flip the table to Enabled<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    env.getMasterServices().getTableStateManager().setTableState(<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      tableName,<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      TableState.State.ENABLED);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    LOG.info("Table '" + tableName + "' was successfully enabled.");<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>  /**<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   * Action after enabling table.<a name="line.390"></a>
-<span class="sourceLineNo">391</span>   * @param env MasterProcedureEnv<a name="line.391"></a>
-<span class="sourceLineNo">392</span>   * @param state the procedure state<a name="line.392"></a>
-<span class="sourceLineNo">393</span>   * @throws IOException<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   * @throws InterruptedException<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   */<a name="line.395"></a>
-<span class="sourceLineNo">396</span>  private void postEnable(final MasterProcedureEnv env, final EnableTableState state)<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      throws IOException, InterruptedException {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    runCoprocessorAction(env, state);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * The procedure could be restarted from a different machine. If the variable is null, we need to<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * retrieve it.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * @return traceEnabled<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   */<a name="line.405"></a>
-<span class="sourceLineNo">406</span>  private Boolean isTraceEnabled() {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    if (traceEnabled == null) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      traceEnabled = LOG.isTraceEnabled();<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    return traceEnabled;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>  }<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>  /**<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * Coprocessor Action.<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * @param env MasterProcedureEnv<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * @param state the procedure state<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * @throws IOException<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   * @throws InterruptedException<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   */<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  private void runCoprocessorAction(final MasterProcedureEnv env, final EnableTableState state)<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      throws IOException, InterruptedException {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    if (cpHost != null) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      switch (state) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        case ENABLE_TABLE_PRE_OPERATION:<a name="line.425"></a>
-<span class="sourceLineNo">426</span>          cpHost.preEnableTableAction(getTableName(), getUser());<a name="line.426"></a>
-<span class="sourceLineNo">427</span>          break;<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        case ENABLE_TABLE_POST_OPERATION:<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          cpHost.postCompletedEnableTableAction(getTableName(), getUser());<a name="line.429"></a>
-<span class="sourceLineNo">430</span>          break;<a name="line.430"></a>
-<span class="sourceLineNo">431</span>        default:<a name="line.431"></a>
-<span class="sourceLineNo">432</span>          throw new UnsupportedOperationException(this + " unhandled state=" + state);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      }<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  }<a name="line.435"></a>
-<span class="sourceLineNo">436</span>}<a name="line.436"></a>
+<span class="sourceLineNo">281</span>    MasterProcedureProtos.EnableTableStateData enableTableMsg =<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      serializer.deserialize(MasterProcedureProtos.EnableTableStateData.class);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    setUser(MasterProcedureUtil.toUserInfo(enableTableMsg.getUserInfo()));<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    tableName = ProtobufUtil.toTableName(enableTableMsg.getTableName());<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  }<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span>  @Override<a name="line.287"></a>
+<span class="sourceLineNo">288</span>  public TableName getTableName() {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    return tableName;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  }<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span>  @Override<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  public TableOperationType getTableOperationType() {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    return TableOperationType.ENABLE;<a name="line.294"></a>
+<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
+<span class="sourceLineNo">296</span><a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span>  /**<a name="line.298"></a>
+<span class="sourceLineNo">299</span>   * Action before any real action of enabling table. Set the exception in the procedure instead<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * of throwing it.  This approach is to deal with backward compatible with 1.0.<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   * @param env MasterProcedureEnv<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * @return whether the table passes the necessary checks<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * @throws IOException<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   */<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  private boolean prepareEnable(final MasterProcedureEnv env) throws IOException {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    boolean canTableBeEnabled = true;<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>    // Check whether table exists<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    if (!MetaTableAccessor.tableExists(env.getMasterServices().getConnection(), tableName)) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      setFailure("master-enable-table", new TableNotFoundException(tableName));<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      canTableBeEnabled = false;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    } else {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      // There could be multiple client requests trying to disable or enable<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      // the table at the same time. Ensure only the first request is honored<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      // After that, no other requests can be accepted until the table reaches<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      // DISABLED or ENABLED.<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      //<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      // Note: in 1.0 release, we called TableStateManager.setTableStateIfInStates() to set<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      // the state to ENABLING from DISABLED. The implementation was done before table lock<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      // was implemented. With table lock, there is no need to set the state here (it will<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      // set the state later on). A quick state check should be enough for us to move forward.<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      TableStateManager tsm = env.getMasterServices().getTableStateManager();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      TableState ts = tsm.getTableState(tableName);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      if(!ts.isDisabled()){<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        LOG.info("Not DISABLED tableState={}; skipping enable; {}", ts.getState(), this);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        setFailure("master-enable-table", new TableNotDisabledException(ts.toString()));<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        canTableBeEnabled = false;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    }<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>    // We are done the check. Future actions in this procedure could be done asynchronously.<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    releaseSyncLatch();<a name="line.332"></a>
+<span class="sourceLineNo">333</span><a name="line.333"></a>
+<span class="sourceLineNo">334</span>    return canTableBeEnabled;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>  /**<a name="line.337"></a>
+<span class="sourceLineNo">338</span>   * Action before enabling table.<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   * @param env MasterProcedureEnv<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * @param state the procedure state<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * @throws IOException<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * @throws InterruptedException<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   */<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  private void preEnable(final MasterProcedureEnv env, final EnableTableState state)<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      throws IOException, InterruptedException {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    runCoprocessorAction(env, state);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span>  /**<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * Mark table state to Enabling<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   * @param env MasterProcedureEnv<a name="line.351"></a>
+<span class="sourceLineNo">352</span>   * @param tableName the target table<a name="line.352"></a>
+<span class="sourceLineNo">353</span>   * @throws IOException<a name="line.353"></a>
+<span class="sourceLineNo">354</span>   */<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  protected static void setTableStateToEnabling(<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      final MasterProcedureEnv env,<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      final TableName tableName) throws IOException {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    // Set table disabling flag up in zk.<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    LOG.info("Attempting to enable the table " + tableName);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    env.getMasterServices().getTableStateManager().setTableState(<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      tableName,<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      TableState.State.ENABLING);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  }<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span>  /**<a name="line.365"></a>
+<span class="sourceLineNo">366</span>   * Mark table state to Enabled<a name="line.366"></a>
+<span class="sourceLineNo">367</span>   * @param env MasterProcedureEnv<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   * @throws IOException<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   */<a name="line.369"></a>
+<span class="sourceLineNo">370</span>  protected static void setTableStateToEnabled(<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      final MasterProcedureEnv env,<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      final TableName tableName) throws IOException {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    // Flip the table to Enabled<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    env.getMasterServices().getTableStateManager().setTableState(<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      tableName,<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      TableState.State.ENABLED);<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    LOG.info("Table '" + tableName + "' was successfully enabled.");<a name="line.377"></a>
+<span class="sourceLineNo">378</span>  }<a name="line.378"></a>
+<span class="sourceLineNo">379</span><a name="line.379"></a>
+<span class="sourceLineNo">380</span>  /**<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   * Action after enabling table.<a name="line.381"></a>
+<span class="sourceLineNo">382</span>   * @param env MasterProcedureEnv<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   * @param state the procedure state<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * @throws IOException<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * @throws InterruptedException<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   */<a name="line.386"></a>
+<span class="sourceLineNo">387</span>  private void postEnable(final MasterProcedureEnv env, final EnableTableState state)<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      throws IOException, InterruptedException {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    runCoprocessorAction(env, state);<a name="line.389"></a>
+<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span>  /**<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   * The procedure could be restarted from a different machine. If the variable is null, we need to<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * retrieve it.<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * @return traceEnabled<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   */<a name="line.396"></a>
+<span class="sourceLineNo">397</span>  private Boolean isTraceEnabled() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    if (traceEnabled == null) {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      traceEnabled = LOG.isTraceEnabled();<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    return traceEnabled;<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  /**<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * Coprocessor Action.<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   * @param env MasterProcedureEnv<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   * @param state the procedure state<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   * @throws IOException<a name="line.408"></a>
+<span class="sourceLineNo">409</span>   * @throws InterruptedException<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   */<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  private void runCoprocessorAction(final MasterProcedureEnv env, final EnableTableState state)<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      throws IOException, InterruptedException {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    if (cpHost != null) {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      switch (state) {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        case ENABLE_TABLE_PRE_OPERATION:<a name="line.416"></a>
+<span class="sourceLineNo">417</span>          cpHost.preEnableTableAction(getTableName(), getUser());<a name="line.417"></a>
+<span class="sourceLineNo">418</span>          break;<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        case ENABLE_TABLE_POST_OPERATION:<a name="line.419"></a>
+<span class="sourceLineNo">420</span>          cpHost.postCompletedEnableTableAction(getTableName(), getUser());<a name="line.420"></a>
+<span class="sourceLineNo">421</span>          break;<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        default:<a name="line.422"></a>
+<span class="sourceLineNo">423</span>          throw new UnsupportedOperationException(this + " unhandled state=" + state);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      }<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    }<a name="line.425"></a>
+<span class="sourceLineNo">426</span>  }<a name="line.426"></a>
+<span class="sourceLineNo">427</span>}<a name="line.427"></a>
 
 
 


[20/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
index 6f4f1df..a2f36de 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
@@ -1489,7 +1489,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>WALS_PATH_FILTER</h4>
-<pre>private static final&nbsp;org.apache.hadoop.fs.PathFilter <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1264">WALS_PATH_FILTER</a></pre>
+<pre>private static final&nbsp;org.apache.hadoop.fs.PathFilter <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1265">WALS_PATH_FILTER</a></pre>
 </li>
 </ul>
 <a name="FILE_STATUS_ID_COMPARATOR">
@@ -1498,7 +1498,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FILE_STATUS_ID_COMPARATOR</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;org.apache.hadoop.fs.FileStatus&gt; <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1272">FILE_STATUS_ID_COMPARATOR</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;org.apache.hadoop.fs.FileStatus&gt; <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1273">FILE_STATUS_ID_COMPARATOR</a></pre>
 </li>
 </ul>
 </li>
@@ -1555,7 +1555,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.276">start</a>(int&nbsp;numSlots)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.277">start</a>(int&nbsp;numSlots)
            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/procedure2/store/ProcedureStore.html#start-int-">ProcedureStore</a></code></span></div>
 <div class="block">Start/Open the procedure store</div>
@@ -1571,7 +1571,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.326">stop</a>(boolean&nbsp;abort)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.327">stop</a>(boolean&nbsp;abort)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#stop-boolean-">ProcedureStore</a></code></span></div>
 <div class="block">Stop/Close the procedure store</div>
 <dl>
@@ -1586,7 +1586,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>sendStopSignal</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.359">sendStopSignal</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.360">sendStopSignal</a>()</pre>
 </li>
 </ul>
 <a name="getNumThreads--">
@@ -1595,7 +1595,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumThreads</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.371">getNumThreads</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.372">getNumThreads</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the number of threads/slots passed to start()</dd>
@@ -1608,7 +1608,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>setRunningProcedureCount</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.376">setRunningProcedureCount</a>(int&nbsp;count)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.377">setRunningProcedureCount</a>(int&nbsp;count)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#setRunningProcedureCount-int-">ProcedureStore</a></code></span></div>
 <div class="block">Set the number of procedure running.
  This can be used, for example, by the store to know how long to wait before a sync.</div>
@@ -1624,7 +1624,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreTracker</h4>
-<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.381">getStoreTracker</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.382">getStoreTracker</a>()</pre>
 </li>
 </ul>
 <a name="getActiveLogs--">
@@ -1633,7 +1633,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getActiveLogs</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&gt;&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.385">getActiveLogs</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&gt;&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.386">getActiveLogs</a>()</pre>
 </li>
 </ul>
 <a name="getCorruptedLogs--">
@@ -1642,7 +1642,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getCorruptedLogs</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&gt;&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.394">getCorruptedLogs</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&gt;&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.395">getCorruptedLogs</a>()</pre>
 </li>
 </ul>
 <a name="recoverLease--">
@@ -1651,7 +1651,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>recoverLease</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.399">recoverLease</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.400">recoverLease</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"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#recoverLease--">ProcedureStore</a></code></span></div>
 <div class="block">Acquire the lease for the procedure store.</div>
@@ -1667,7 +1667,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>load</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.446">load</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureLoader</a>&nbsp;loader)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.447">load</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureLoader</a>&nbsp;loader)
           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/procedure2/store/ProcedureStore.html#load-org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureLoader-">ProcedureStore</a></code></span></div>
 <div class="block">Load the Procedures in the store.</div>
@@ -1685,7 +1685,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>tryCleanupLogsOnLoad</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.502">tryCleanupLogsOnLoad</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.503">tryCleanupLogsOnLoad</a>()</pre>
 </li>
 </ul>
 <a name="insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">
@@ -1694,7 +1694,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>insert</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.523">insert</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.524">insert</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
                    <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;subprocs)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">ProcedureStore</a></code></span></div>
 <div class="block">When a procedure is submitted to the executor insert(proc, null) will be called.
@@ -1716,7 +1716,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>insert</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.557">insert</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;procs)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.558">insert</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;procs)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure:A-">ProcedureStore</a></code></span></div>
 <div class="block">Serialize a set of new procedures.
  These procedures are freshly submitted to the executor and each procedure
@@ -1733,7 +1733,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>update</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.586">update</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.587">update</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#update-org.apache.hadoop.hbase.procedure2.Procedure-">ProcedureStore</a></code></span></div>
 <div class="block">The specified procedure was executed,
  and the new state should be written to the store.</div>
@@ -1749,7 +1749,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.609">delete</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.610">delete</a>(long&nbsp;procId)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#delete-long-">ProcedureStore</a></code></span></div>
 <div class="block">The specified procId was removed from the executor,
  due to completion, abort or failure.
@@ -1766,7 +1766,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.629">delete</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.630">delete</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
                    long[]&nbsp;subProcIds)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#delete-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">ProcedureStore</a></code></span></div>
 <div class="block">The parent procedure completed.
@@ -1784,7 +1784,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.654">delete</a>(long[]&nbsp;procIds,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.655">delete</a>(long[]&nbsp;procIds,
                    int&nbsp;offset,
                    int&nbsp;count)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#delete-long:A-int-int-">ProcedureStore</a></code></span></div>
@@ -1805,7 +1805,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.665">delete</a>(long[]&nbsp;procIds)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.666">delete</a>(long[]&nbsp;procIds)</pre>
 </li>
 </ul>
 <a name="acquireSlot--">
@@ -1814,7 +1814,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>acquireSlot</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.689">acquireSlot</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.690">acquireSlot</a>()</pre>
 </li>
 </ul>
 <a name="releaseSlot-org.apache.hadoop.hbase.procedure2.util.ByteSlot-">
@@ -1823,7 +1823,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>releaseSlot</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.694">releaseSlot</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.695">releaseSlot</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot)</pre>
 </li>
 </ul>
 <a name="pushData-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.PushType-org.apache.hadoop.hbase.procedure2.util.ByteSlot-long-long:A-">
@@ -1832,7 +1832,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>pushData</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.701">pushData</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a>&nbsp;type,
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.702">pushData</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a>&nbsp;type,
                       <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
                       long&nbsp;procId,
                       long[]&nbsp;subProcIds)</pre>
@@ -1844,7 +1844,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>updateStoreTracker</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.761">updateStoreTracker</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a>&nbsp;type,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.762">updateStoreTracker</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a>&nbsp;type,
                                 long&nbsp;procId,
                                 long[]&nbsp;subProcIds)</pre>
 </li>
@@ -1855,7 +1855,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>isSyncAborted</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.792">isSyncAborted</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.793">isSyncAborted</a>()</pre>
 </li>
 </ul>
 <a name="syncLoop--">
@@ -1864,7 +1864,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>syncLoop</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.796">syncLoop</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.797">syncLoop</a>()
                throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1878,7 +1878,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getSyncMetrics</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.SyncMetrics</a>&gt;&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.876">getSyncMetrics</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.SyncMetrics</a>&gt;&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.877">getSyncMetrics</a>()</pre>
 </li>
 </ul>
 <a name="syncSlots--">
@@ -1887,7 +1887,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>syncSlots</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.885">syncSlots</a>()
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.886">syncSlots</a>()
                 throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1901,7 +1901,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>syncSlots</h4>
-<pre>protected&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.913">syncSlots</a>(org.apache.hadoop.fs.FSDataOutputStream&nbsp;stream,
+<pre>protected&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.914">syncSlots</a>(org.apache.hadoop.fs.FSDataOutputStream&nbsp;stream,
                          <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>[]&nbsp;slots,
                          int&nbsp;offset,
                          int&nbsp;count)
@@ -1918,7 +1918,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>syncStream</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.932">syncStream</a>(org.apache.hadoop.fs.FSDataOutputStream&nbsp;stream)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.933">syncStream</a>(org.apache.hadoop.fs.FSDataOutputStream&nbsp;stream)
                    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>
@@ -1932,7 +1932,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>rollWriterWithRetries</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.940">rollWriterWithRetries</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.941">rollWriterWithRetries</a>()</pre>
 </li>
 </ul>
 <a name="tryRollWriter--">
@@ -1941,7 +1941,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>tryRollWriter</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.956">tryRollWriter</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.957">tryRollWriter</a>()</pre>
 </li>
 </ul>
 <a name="getMillisToNextPeriodicRoll--">
@@ -1950,7 +1950,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getMillisToNextPeriodicRoll</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.965">getMillisToNextPeriodicRoll</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.966">getMillisToNextPeriodicRoll</a>()</pre>
 </li>
 </ul>
 <a name="getMillisFromLastRoll--">
@@ -1959,7 +1959,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getMillisFromLastRoll</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.972">getMillisFromLastRoll</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.973">getMillisFromLastRoll</a>()</pre>
 </li>
 </ul>
 <a name="periodicRollForTesting--">
@@ -1968,7 +1968,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>periodicRollForTesting</h4>
-<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.977">periodicRollForTesting</a>()
+<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.978">periodicRollForTesting</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>
@@ -1982,7 +1982,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>rollWriterForTesting</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.987">rollWriterForTesting</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.988">rollWriterForTesting</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>
@@ -1996,7 +1996,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>removeInactiveLogsForTesting</h4>
-<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.997">removeInactiveLogsForTesting</a>()
+<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.998">removeInactiveLogsForTesting</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>
@@ -2010,7 +2010,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>periodicRoll</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1006">periodicRoll</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1007">periodicRoll</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>
@@ -2024,7 +2024,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>rollWriter</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1027">rollWriter</a>()
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1028">rollWriter</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>
@@ -2038,7 +2038,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>rollWriter</h4>
-<pre>boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1051">rollWriter</a>(long&nbsp;logId)
+<pre>boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1052">rollWriter</a>(long&nbsp;logId)
             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>
@@ -2052,7 +2052,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>closeCurrentLogStream</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1128">closeCurrentLogStream</a>(boolean&nbsp;abort)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1129">closeCurrentLogStream</a>(boolean&nbsp;abort)</pre>
 </li>
 </ul>
 <a name="removeInactiveLogs--">
@@ -2061,7 +2061,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>removeInactiveLogs</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1155">removeInactiveLogs</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1156">removeInactiveLogs</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>
@@ -2075,7 +2075,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>buildHoldingCleanupTracker</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1168">buildHoldingCleanupTracker</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1169">buildHoldingCleanupTracker</a>()</pre>
 </li>
 </ul>
 <a name="removeAllLogs-long-java.lang.String-">
@@ -2084,7 +2084,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>removeAllLogs</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1202">removeAllLogs</a>(long&nbsp;lastLogId,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1203">removeAllLogs</a>(long&nbsp;lastLogId,
                            <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;why)</pre>
 <div class="block">Remove all logs with logId <= <code>lastLogId</code>.</div>
 </li>
@@ -2095,7 +2095,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>removeLogFile</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1224">removeLogFile</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&nbsp;log,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1225">removeLogFile</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&nbsp;log,
                               org.apache.hadoop.fs.Path&nbsp;walArchiveDir)</pre>
 </li>
 </ul>
@@ -2105,7 +2105,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1241">getWALDir</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1242">getWALDir</a>()</pre>
 </li>
 </ul>
 <a name="getWalArchiveDir--">
@@ -2114,7 +2114,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getWalArchiveDir</h4>
-<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1246">getWalArchiveDir</a>()</pre>
+<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1247">getWalArchiveDir</a>()</pre>
 </li>
 </ul>
 <a name="getFileSystem--">
@@ -2123,7 +2123,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getFileSystem</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1250">getFileSystem</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1251">getFileSystem</a>()</pre>
 </li>
 </ul>
 <a name="getLogFilePath-long-">
@@ -2132,7 +2132,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getLogFilePath</h4>
-<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1254">getLogFilePath</a>(long&nbsp;logId)
+<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1255">getLogFilePath</a>(long&nbsp;logId)
                                             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>
@@ -2146,7 +2146,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getLogIdFromName</h4>
-<pre>private static&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1258">getLogIdFromName</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;name)</pre>
+<pre>private static&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1259">getLogIdFromName</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;name)</pre>
 </li>
 </ul>
 <a name="getLogFiles--">
@@ -2155,7 +2155,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getLogFiles</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.FileStatus[]&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1282">getLogFiles</a>()
+<pre>private&nbsp;org.apache.hadoop.fs.FileStatus[]&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1283">getLogFiles</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>
@@ -2169,7 +2169,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxLogId</h4>
-<pre>private static&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1298">getMaxLogId</a>(org.apache.hadoop.fs.FileStatus[]&nbsp;logFiles)</pre>
+<pre>private static&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1299">getMaxLogId</a>(org.apache.hadoop.fs.FileStatus[]&nbsp;logFiles)</pre>
 <div class="block">Make sure that the file set are gotten by calling <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#getLogFiles--"><code>getLogFiles()</code></a>, where we will sort
  the file set by log id.</div>
 <dl>
@@ -2184,7 +2184,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>initOldLogs</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1310">initOldLogs</a>(org.apache.hadoop.fs.FileStatus[]&nbsp;logFiles)
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1311">initOldLogs</a>(org.apache.hadoop.fs.FileStatus[]&nbsp;logFiles)
                   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">Make sure that the file set are gotten by calling <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#getLogFiles--"><code>getLogFiles()</code></a>, where we will sort
  the file set by log id.</div>
@@ -2202,7 +2202,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>initTrackerFromOldLogs</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1336">initTrackerFromOldLogs</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1337">initTrackerFromOldLogs</a>()</pre>
 <div class="block">If last log's tracker is not null, use it as <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#storeTracker"><code>storeTracker</code></a>. Otherwise, set storeTracker
  as partial, and let <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><code>ProcedureWALFormatReader</code></a> rebuild it using entries in the log.</div>
 </li>
@@ -2213,7 +2213,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>initOldLog</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1352">initOldLog</a>(org.apache.hadoop.fs.FileStatus&nbsp;logFile,
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1353">initOldLog</a>(org.apache.hadoop.fs.FileStatus&nbsp;logFile,
                                     org.apache.hadoop.fs.Path&nbsp;walArchiveDir)
                              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">Loads given log file and it's tracker.</div>
@@ -2229,7 +2229,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockListLast">
 <li class="blockList">
 <h4>main</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1390">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1391">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
                  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">Parses a directory of WALs building up ProcedureState.
  For testing parse and profiling.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index 49acfc8..4ba7480 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -229,13 +229,13 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottlingException.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottlingException.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
index 7eedc5c..e8df157 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -247,9 +247,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
 </ul>
 </li>
 </ul>

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

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

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/org/apache/hadoop/hbase/util/class-use/IdLock.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/class-use/IdLock.html b/devapidocs/org/apache/hadoop/hbase/util/class-use/IdLock.html
index bb5bb72..f13d245 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/class-use/IdLock.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/class-use/IdLock.html
@@ -188,6 +188,19 @@
 </tr>
 </tbody>
 </table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a> that return <a href="../../../../../../org/apache/hadoop/hbase/util/IdLock.html" title="class in org.apache.hadoop.hbase.util">IdLock</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/util/IdLock.html" title="class in org.apache.hadoop.hbase.util">IdLock</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ProcedureExecutor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#getProcExecutionLock--">getProcExecutionLock</a></span>()</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
 <caption><span>Constructors in <a href="../../../../../../org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a> with parameters of type <a href="../../../../../../org/apache/hadoop/hbase/util/IdLock.html" title="class in org.apache.hadoop.hbase.util">IdLock</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/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 7fafe39..276760a 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 = "Mon Nov 12 14:44:31 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Tue Nov 13 14:43:38 UTC 2018";<a name="line.13"></a>
 <span class="sourceLineNo">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 = "6c835d6f0c60e33b7010c2644f3d93c2";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "55a6c0a68f033730bffcb68c308d426e";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/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 c3171c5..0377974 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
@@ -2578,7 +2578,7 @@
 <span class="sourceLineNo">2570</span>        // Note: if the procedure throws exception, we will catch it and rethrow.<a name="line.2570"></a>
 <span class="sourceLineNo">2571</span>        final ProcedurePrepareLatch prepareLatch = ProcedurePrepareLatch.createLatch();<a name="line.2571"></a>
 <span class="sourceLineNo">2572</span>        submitProcedure(new EnableTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>            tableName, false, prepareLatch));<a name="line.2573"></a>
+<span class="sourceLineNo">2573</span>            tableName, prepareLatch));<a name="line.2573"></a>
 <span class="sourceLineNo">2574</span>        prepareLatch.await();<a name="line.2574"></a>
 <span class="sourceLineNo">2575</span><a name="line.2575"></a>
 <span class="sourceLineNo">2576</span>        getMaster().getMasterCoprocessorHost().postEnableTable(tableName);<a name="line.2576"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/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 c3171c5..0377974 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
@@ -2578,7 +2578,7 @@
 <span class="sourceLineNo">2570</span>        // Note: if the procedure throws exception, we will catch it and rethrow.<a name="line.2570"></a>
 <span class="sourceLineNo">2571</span>        final ProcedurePrepareLatch prepareLatch = ProcedurePrepareLatch.createLatch();<a name="line.2571"></a>
 <span class="sourceLineNo">2572</span>        submitProcedure(new EnableTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>            tableName, false, prepareLatch));<a name="line.2573"></a>
+<span class="sourceLineNo">2573</span>            tableName, prepareLatch));<a name="line.2573"></a>
 <span class="sourceLineNo">2574</span>        prepareLatch.await();<a name="line.2574"></a>
 <span class="sourceLineNo">2575</span><a name="line.2575"></a>
 <span class="sourceLineNo">2576</span>        getMaster().getMasterCoprocessorHost().postEnableTable(tableName);<a name="line.2576"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/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 c3171c5..0377974 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
@@ -2578,7 +2578,7 @@
 <span class="sourceLineNo">2570</span>        // Note: if the procedure throws exception, we will catch it and rethrow.<a name="line.2570"></a>
 <span class="sourceLineNo">2571</span>        final ProcedurePrepareLatch prepareLatch = ProcedurePrepareLatch.createLatch();<a name="line.2571"></a>
 <span class="sourceLineNo">2572</span>        submitProcedure(new EnableTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>            tableName, false, prepareLatch));<a name="line.2573"></a>
+<span class="sourceLineNo">2573</span>            tableName, prepareLatch));<a name="line.2573"></a>
 <span class="sourceLineNo">2574</span>        prepareLatch.await();<a name="line.2574"></a>
 <span class="sourceLineNo">2575</span><a name="line.2575"></a>
 <span class="sourceLineNo">2576</span>        getMaster().getMasterCoprocessorHost().postEnableTable(tableName);<a name="line.2576"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/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 c3171c5..0377974 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
@@ -2578,7 +2578,7 @@
 <span class="sourceLineNo">2570</span>        // Note: if the procedure throws exception, we will catch it and rethrow.<a name="line.2570"></a>
 <span class="sourceLineNo">2571</span>        final ProcedurePrepareLatch prepareLatch = ProcedurePrepareLatch.createLatch();<a name="line.2571"></a>
 <span class="sourceLineNo">2572</span>        submitProcedure(new EnableTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>            tableName, false, prepareLatch));<a name="line.2573"></a>
+<span class="sourceLineNo">2573</span>            tableName, prepareLatch));<a name="line.2573"></a>
 <span class="sourceLineNo">2574</span>        prepareLatch.await();<a name="line.2574"></a>
 <span class="sourceLineNo">2575</span><a name="line.2575"></a>
 <span class="sourceLineNo">2576</span>        getMaster().getMasterCoprocessorHost().postEnableTable(tableName);<a name="line.2576"></a>


[03/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html
index 561840d..747222d 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.html
@@ -41,363 +41,357 @@
 <span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.ServerName;<a name="line.33"></a>
 <span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.TableDescriptors;<a name="line.34"></a>
 <span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.TableName;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.YouAreDeadException;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.HConnectionTestingUtility;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.master.MasterWalManager;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.master.MockNoopMasterServices;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.ServerManager;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.TableStateManager;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.procedure2.store.NoopProcedureStore;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureStoreListener;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.zookeeper.KeeperException;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.mockito.Mockito;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.mockito.invocation.InvocationOnMock;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.mockito.stubbing.Answer;<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException;<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>/**<a name="line.82"></a>
-<span class="sourceLineNo">083</span> * A mocked master services.<a name="line.83"></a>
-<span class="sourceLineNo">084</span> * Tries to fake it. May not always work.<a name="line.84"></a>
-<span class="sourceLineNo">085</span> */<a name="line.85"></a>
-<span class="sourceLineNo">086</span>public class MockMasterServices extends MockNoopMasterServices {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private final MasterFileSystem fileSystemManager;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  private final MasterWalManager walManager;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private final AssignmentManager assignmentManager;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private final TableStateManager tableStateManager;<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  private MasterProcedureEnv procedureEnv;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  private ProcedureExecutor&lt;MasterProcedureEnv&gt; procedureExecutor;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  private ProcedureStore procedureStore;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private final ClusterConnection connection;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  private final LoadBalancer balancer;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private final ServerManager serverManager;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  // Set of regions on a 'server'. Populated externally. Used in below faking 'cluster'.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private final NavigableMap&lt;ServerName, SortedSet&lt;byte []&gt;&gt; regionsToRegionServers;<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private final ProcedureEvent initialized = new ProcedureEvent("master initialized");<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  public static final String DEFAULT_COLUMN_FAMILY_NAME = "cf";<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  public static final ServerName MOCK_MASTER_SERVERNAME =<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      ServerName.valueOf("mockmaster.example.org", 1234, -1L);<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public MockMasterServices(Configuration conf,<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      NavigableMap&lt;ServerName, SortedSet&lt;byte []&gt;&gt; regionsToRegionServers)<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  throws IOException {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    super(conf);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    this.regionsToRegionServers = regionsToRegionServers;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    Superusers.initialize(conf);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    this.walManager = new MasterWalManager(this);<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    // Mock an AM.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    this.assignmentManager = new AssignmentManager(this, new MockRegionStateStore(this)) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      @Override<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      public boolean isTableEnabled(final TableName tableName) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>        return true;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      }<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>      @Override<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      public boolean isTableDisabled(final TableName tableName) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>        return false;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      }<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>      @Override<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      protected boolean waitServerReportEvent(ServerName serverName, Procedure proc) {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        // Make a report with current state of the server 'serverName' before we call wait..<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        SortedSet&lt;byte []&gt; regions = regionsToRegionServers.get(serverName);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>        try {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>          getAssignmentManager().reportOnlineRegions(serverName,<a name="line.131"></a>
-<span class="sourceLineNo">132</span>              regions == null? new HashSet&lt;byte []&gt;(): regions);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>        } catch (YouAreDeadException e) {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>          throw new RuntimeException(e);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>        }<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        return super.waitServerReportEvent(serverName, proc);<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      }<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    };<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    this.balancer = LoadBalancerFactory.getLoadBalancer(conf);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    this.serverManager = new ServerManager(this);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    this.tableStateManager = Mockito.mock(TableStateManager.class);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    Mockito.when(this.tableStateManager.getTableState(Mockito.any())).<a name="line.142"></a>
-<span class="sourceLineNo">143</span>        thenReturn(new TableState(TableName.valueOf("AnyTableNameSetInMockMasterServcies"),<a name="line.143"></a>
-<span class="sourceLineNo">144</span>            TableState.State.ENABLED));<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>    // Mock up a Client Interface<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    ClientProtos.ClientService.BlockingInterface ri =<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        Mockito.mock(ClientProtos.ClientService.BlockingInterface.class);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    MutateResponse.Builder builder = MutateResponse.newBuilder();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    builder.setProcessed(true);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    try {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      Mockito.when(ri.mutate(any(), any())).thenReturn(builder.build());<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    } catch (ServiceException se) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      throw ProtobufUtil.handleRemoteException(se);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    try {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      Mockito.when(ri.multi(any(), any())).thenAnswer(new Answer&lt;MultiResponse&gt;() {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>          @Override<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          public MultiResponse answer(InvocationOnMock invocation) throws Throwable {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            return buildMultiResponse(invocation.getArgument(1));<a name="line.160"></a>
-<span class="sourceLineNo">161</span>          }<a name="line.161"></a>
-<span class="sourceLineNo">162</span>        });<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    } catch (ServiceException se) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      throw ProtobufUtil.getRemoteException(se);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    // Mock n ClusterConnection and an AdminProtocol implementation. Have the<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    // ClusterConnection return the HRI.  Have the HRI return a few mocked up responses<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    // to make our test work.<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    this.connection =<a name="line.169"></a>
-<span class="sourceLineNo">170</span>        HConnectionTestingUtility.getMockedConnectionAndDecorate(getConfiguration(),<a name="line.170"></a>
-<span class="sourceLineNo">171</span>          Mockito.mock(AdminProtos.AdminService.BlockingInterface.class), ri, MOCK_MASTER_SERVERNAME,<a name="line.171"></a>
-<span class="sourceLineNo">172</span>          RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    // Set hbase.rootdir into test dir.<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    Path rootdir = FSUtils.getRootDir(getConfiguration());<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    FSUtils.setRootDir(getConfiguration(), rootdir);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    Mockito.mock(AdminProtos.AdminService.BlockingInterface.class);<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  public void start(final int numServes, final RSProcedureDispatcher remoteDispatcher)<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      throws IOException, KeeperException {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    startProcedureExecutor(remoteDispatcher);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    this.assignmentManager.start();<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    for (int i = 0; i &lt; numServes; ++i) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      ServerName sn = ServerName.valueOf("localhost", 100 + i, 1);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      serverManager.regionServerReport(sn, new ServerLoad(ServerMetricsBuilder.of(sn)));<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    }<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    this.procedureExecutor.getEnvironment().setEventReady(initialized, true);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  /**<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * Call this restart method only after running MockMasterServices#start()<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * The RSs can be differentiated by the port number, see<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   * ServerName in MockMasterServices#start() method above.<a name="line.193"></a>
-<span class="sourceLineNo">194</span>   * Restart of region server will have new startcode in server name<a name="line.194"></a>
-<span class="sourceLineNo">195</span>   *<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   * @param serverName Server name to be restarted<a name="line.196"></a>
-<span class="sourceLineNo">197</span>   */<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  public void restartRegionServer(ServerName serverName) throws IOException {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    List&lt;ServerName&gt; onlineServers = serverManager.getOnlineServersList();<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    long startCode = -1;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    for (ServerName s : onlineServers) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      if (s.getAddress().equals(serverName.getAddress())) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        startCode = s.getStartcode() + 1;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        break;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      }<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    if (startCode == -1) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      return;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    ServerName sn = ServerName.valueOf(serverName.getAddress().toString(), startCode);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    serverManager.regionServerReport(sn, new ServerLoad(ServerMetricsBuilder.of(sn)));<a name="line.211"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.HConnectionTestingUtility;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.master.MasterWalManager;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.master.MockNoopMasterServices;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.master.ServerManager;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.TableStateManager;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.procedure2.store.NoopProcedureStore;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureStoreListener;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.zookeeper.KeeperException;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.mockito.Mockito;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.mockito.invocation.InvocationOnMock;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.mockito.stubbing.Answer;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException;<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>/**<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * A mocked master services.<a name="line.81"></a>
+<span class="sourceLineNo">082</span> * Tries to fake it. May not always work.<a name="line.82"></a>
+<span class="sourceLineNo">083</span> */<a name="line.83"></a>
+<span class="sourceLineNo">084</span>public class MockMasterServices extends MockNoopMasterServices {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  private final MasterFileSystem fileSystemManager;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private final MasterWalManager walManager;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  private final AssignmentManager assignmentManager;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private final TableStateManager tableStateManager;<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  private MasterProcedureEnv procedureEnv;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private ProcedureExecutor&lt;MasterProcedureEnv&gt; procedureExecutor;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private ProcedureStore procedureStore;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  private final ClusterConnection connection;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  private final LoadBalancer balancer;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  private final ServerManager serverManager;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  // Set of regions on a 'server'. Populated externally. Used in below faking 'cluster'.<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  private final NavigableMap&lt;ServerName, SortedSet&lt;byte []&gt;&gt; regionsToRegionServers;<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  private final ProcedureEvent initialized = new ProcedureEvent("master initialized");<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  public static final String DEFAULT_COLUMN_FAMILY_NAME = "cf";<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  public static final ServerName MOCK_MASTER_SERVERNAME =<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      ServerName.valueOf("mockmaster.example.org", 1234, -1L);<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  public MockMasterServices(Configuration conf,<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      NavigableMap&lt;ServerName, SortedSet&lt;byte []&gt;&gt; regionsToRegionServers)<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  throws IOException {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    super(conf);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    this.regionsToRegionServers = regionsToRegionServers;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    Superusers.initialize(conf);<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    this.walManager = new MasterWalManager(this);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    // Mock an AM.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    this.assignmentManager = new AssignmentManager(this, new MockRegionStateStore(this)) {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      @Override<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      public boolean isTableEnabled(final TableName tableName) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        return true;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      }<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>      @Override<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      public boolean isTableDisabled(final TableName tableName) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>        return false;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      }<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>      @Override<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      protected boolean waitServerReportEvent(ServerName serverName, Procedure proc) {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>        // Make a report with current state of the server 'serverName' before we call wait..<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(serverName);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        getAssignmentManager().reportOnlineRegions(serverName,<a name="line.128"></a>
+<span class="sourceLineNo">129</span>          regions == null ? new HashSet&lt;byte[]&gt;() : regions);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        return super.waitServerReportEvent(serverName, proc);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      }<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    };<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    this.balancer = LoadBalancerFactory.getLoadBalancer(conf);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    this.serverManager = new ServerManager(this);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    this.tableStateManager = Mockito.mock(TableStateManager.class);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    Mockito.when(this.tableStateManager.getTableState(Mockito.any())).<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        thenReturn(new TableState(TableName.valueOf("AnyTableNameSetInMockMasterServcies"),<a name="line.137"></a>
+<span class="sourceLineNo">138</span>            TableState.State.ENABLED));<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>    // Mock up a Client Interface<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    ClientProtos.ClientService.BlockingInterface ri =<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        Mockito.mock(ClientProtos.ClientService.BlockingInterface.class);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    MutateResponse.Builder builder = MutateResponse.newBuilder();<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    builder.setProcessed(true);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    try {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      Mockito.when(ri.mutate(any(), any())).thenReturn(builder.build());<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    } catch (ServiceException se) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      throw ProtobufUtil.handleRemoteException(se);<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    }<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    try {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      Mockito.when(ri.multi(any(), any())).thenAnswer(new Answer&lt;MultiResponse&gt;() {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>          @Override<a name="line.152"></a>
+<span class="sourceLineNo">153</span>          public MultiResponse answer(InvocationOnMock invocation) throws Throwable {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>            return buildMultiResponse(invocation.getArgument(1));<a name="line.154"></a>
+<span class="sourceLineNo">155</span>          }<a name="line.155"></a>
+<span class="sourceLineNo">156</span>        });<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    } catch (ServiceException se) {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      throw ProtobufUtil.getRemoteException(se);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    }<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    // Mock n ClusterConnection and an AdminProtocol implementation. Have the<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    // ClusterConnection return the HRI.  Have the HRI return a few mocked up responses<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // to make our test work.<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    this.connection =<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        HConnectionTestingUtility.getMockedConnectionAndDecorate(getConfiguration(),<a name="line.164"></a>
+<span class="sourceLineNo">165</span>          Mockito.mock(AdminProtos.AdminService.BlockingInterface.class), ri, MOCK_MASTER_SERVERNAME,<a name="line.165"></a>
+<span class="sourceLineNo">166</span>          RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    // Set hbase.rootdir into test dir.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    Path rootdir = FSUtils.getRootDir(getConfiguration());<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    FSUtils.setRootDir(getConfiguration(), rootdir);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    Mockito.mock(AdminProtos.AdminService.BlockingInterface.class);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
+<span class="sourceLineNo">172</span><a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public void start(final int numServes, final RSProcedureDispatcher remoteDispatcher)<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      throws IOException, KeeperException {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    startProcedureExecutor(remoteDispatcher);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    this.assignmentManager.start();<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    for (int i = 0; i &lt; numServes; ++i) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      ServerName sn = ServerName.valueOf("localhost", 100 + i, 1);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      serverManager.regionServerReport(sn, new ServerLoad(ServerMetricsBuilder.of(sn)));<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    this.procedureExecutor.getEnvironment().setEventReady(initialized, true);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>  /**<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   * Call this restart method only after running MockMasterServices#start()<a name="line.185"></a>
+<span class="sourceLineNo">186</span>   * The RSs can be differentiated by the port number, see<a name="line.186"></a>
+<span class="sourceLineNo">187</span>   * ServerName in MockMasterServices#start() method above.<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   * Restart of region server will have new startcode in server name<a name="line.188"></a>
+<span class="sourceLineNo">189</span>   *<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * @param serverName Server name to be restarted<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   */<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  public void restartRegionServer(ServerName serverName) throws IOException {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    List&lt;ServerName&gt; onlineServers = serverManager.getOnlineServersList();<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    long startCode = -1;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    for (ServerName s : onlineServers) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      if (s.getAddress().equals(serverName.getAddress())) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        startCode = s.getStartcode() + 1;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        break;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    if (startCode == -1) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      return;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    ServerName sn = ServerName.valueOf(serverName.getAddress().toString(), startCode);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    serverManager.regionServerReport(sn, new ServerLoad(ServerMetricsBuilder.of(sn)));<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>  @Override<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  public void stop(String why) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    stopProcedureExecutor();<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    this.assignmentManager.stop();<a name="line.211"></a>
 <span class="sourceLineNo">212</span>  }<a name="line.212"></a>
 <span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>  @Override<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  public void stop(String why) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    stopProcedureExecutor();<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    this.assignmentManager.stop();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  }<a name="line.218"></a>
+<span class="sourceLineNo">214</span>  private void startProcedureExecutor(final RSProcedureDispatcher remoteDispatcher)<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      throws IOException {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    final Configuration conf = getConfiguration();<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    this.procedureStore = new NoopProcedureStore();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    this.procedureStore.registerListener(new ProcedureStoreListener() {<a name="line.218"></a>
 <span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>  private void startProcedureExecutor(final RSProcedureDispatcher remoteDispatcher)<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      throws IOException {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    final Configuration conf = getConfiguration();<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    this.procedureStore = new NoopProcedureStore();<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    this.procedureStore.registerListener(new ProcedureStoreListener() {<a name="line.224"></a>
+<span class="sourceLineNo">220</span>      @Override<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      public void abortProcess() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        abort("The Procedure Store lost the lease", null);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      }<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    });<a name="line.224"></a>
 <span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>      @Override<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      public void abortProcess() {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        abort("The Procedure Store lost the lease", null);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      }<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    });<a name="line.230"></a>
+<span class="sourceLineNo">226</span>    this.procedureEnv = new MasterProcedureEnv(this,<a name="line.226"></a>
+<span class="sourceLineNo">227</span>       remoteDispatcher != null ? remoteDispatcher : new RSProcedureDispatcher(this));<a name="line.227"></a>
+<span class="sourceLineNo">228</span><a name="line.228"></a>
+<span class="sourceLineNo">229</span>    this.procedureExecutor = new ProcedureExecutor&lt;&gt;(conf, procedureEnv, procedureStore,<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      procedureEnv.getProcedureScheduler());<a name="line.230"></a>
 <span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span>    this.procedureEnv = new MasterProcedureEnv(this,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>       remoteDispatcher != null ? remoteDispatcher : new RSProcedureDispatcher(this));<a name="line.233"></a>
-<span class="sourceLineNo">234</span><a name="line.234"></a>
-<span class="sourceLineNo">235</span>    this.procedureExecutor = new ProcedureExecutor&lt;&gt;(conf, procedureEnv, procedureStore,<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      procedureEnv.getProcedureScheduler());<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>    final int numThreads = conf.getInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS,<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        Math.max(Runtime.getRuntime().availableProcessors(),<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          MasterProcedureConstants.DEFAULT_MIN_MASTER_PROCEDURE_THREADS));<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    final boolean abortOnCorruption = conf.getBoolean(<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        MasterProcedureConstants.EXECUTOR_ABORT_ON_CORRUPTION,<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        MasterProcedureConstants.DEFAULT_EXECUTOR_ABORT_ON_CORRUPTION);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    this.procedureStore.start(numThreads);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    ProcedureTestingUtility.initAndStartWorkers(procedureExecutor, numThreads, abortOnCorruption);<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    this.procedureEnv.getRemoteDispatcher().start();<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>  private void stopProcedureExecutor() {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    if (this.procedureEnv != null) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      this.procedureEnv.getRemoteDispatcher().stop();<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>    if (this.procedureExecutor != null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      this.procedureExecutor.stop();<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>    if (this.procedureStore != null) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      this.procedureStore.stop(isAborted());<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>  @Override<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  public boolean isInitialized() {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    return true;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>  }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span>  @Override<a name="line.268"></a>
-<span class="sourceLineNo">269</span>  public ProcedureEvent getInitializedEvent() {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    return this.initialized;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  @Override<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  public MasterFileSystem getMasterFileSystem() {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    return fileSystemManager;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span>  @Override<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  public MasterWalManager getMasterWalManager() {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    return walManager;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  }<a name="line.281"></a>
-<span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>  @Override<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  public ProcedureExecutor&lt;MasterProcedureEnv&gt; getMasterProcedureExecutor() {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    return procedureExecutor;<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span>  @Override<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  public LoadBalancer getLoadBalancer() {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    return balancer;<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>  @Override<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  public ServerManager getServerManager() {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    return serverManager;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  @Override<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  public AssignmentManager getAssignmentManager() {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    return assignmentManager;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span>  @Override<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  public TableStateManager getTableStateManager() {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    return tableStateManager;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>  @Override<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  public ClusterConnection getConnection() {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    return this.connection;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  }<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span>  @Override<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  public ServerName getServerName() {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    return MOCK_MASTER_SERVERNAME;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  }<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span>  @Override<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    return super.getCoordinatedStateManager();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span>  private static class MockRegionStateStore extends RegionStateStore {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    public MockRegionStateStore(final MasterServices master) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      super(master);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    }<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>    @Override<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    public void updateRegionLocation(RegionStateNode regionNode) throws IOException {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
-<span class="sourceLineNo">331</span>  }<a name="line.331"></a>
-<span class="sourceLineNo">332</span><a name="line.332"></a>
-<span class="sourceLineNo">333</span>  @Override<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  public TableDescriptors getTableDescriptors() {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    return new TableDescriptors() {<a name="line.335"></a>
+<span class="sourceLineNo">232</span>    final int numThreads = conf.getInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS,<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        Math.max(Runtime.getRuntime().availableProcessors(),<a name="line.233"></a>
+<span class="sourceLineNo">234</span>          MasterProcedureConstants.DEFAULT_MIN_MASTER_PROCEDURE_THREADS));<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    final boolean abortOnCorruption = conf.getBoolean(<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        MasterProcedureConstants.EXECUTOR_ABORT_ON_CORRUPTION,<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        MasterProcedureConstants.DEFAULT_EXECUTOR_ABORT_ON_CORRUPTION);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    this.procedureStore.start(numThreads);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    ProcedureTestingUtility.initAndStartWorkers(procedureExecutor, numThreads, abortOnCorruption);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    this.procedureEnv.getRemoteDispatcher().start();<a name="line.240"></a>
+<span class="sourceLineNo">241</span>  }<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span>  private void stopProcedureExecutor() {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    if (this.procedureEnv != null) {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      this.procedureEnv.getRemoteDispatcher().stop();<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>    if (this.procedureExecutor != null) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      this.procedureExecutor.stop();<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>    if (this.procedureStore != null) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      this.procedureStore.stop(isAborted());<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    }<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>  @Override<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  public boolean isInitialized() {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    return true;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>  }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span>  @Override<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  public ProcedureEvent getInitializedEvent() {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    return this.initialized;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  }<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>  @Override<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  public MasterFileSystem getMasterFileSystem() {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    return fileSystemManager;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>  }<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>  @Override<a name="line.272"></a>
+<span class="sourceLineNo">273</span>  public MasterWalManager getMasterWalManager() {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    return walManager;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  }<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>  @Override<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  public ProcedureExecutor&lt;MasterProcedureEnv&gt; getMasterProcedureExecutor() {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    return procedureExecutor;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>  @Override<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public LoadBalancer getLoadBalancer() {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    return balancer;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  }<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span>  @Override<a name="line.287"></a>
+<span class="sourceLineNo">288</span>  public ServerManager getServerManager() {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    return serverManager;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  }<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span>  @Override<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  public AssignmentManager getAssignmentManager() {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    return assignmentManager;<a name="line.294"></a>
+<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
+<span class="sourceLineNo">296</span><a name="line.296"></a>
+<span class="sourceLineNo">297</span>  @Override<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  public TableStateManager getTableStateManager() {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    return tableStateManager;<a name="line.299"></a>
+<span class="sourceLineNo">300</span>  }<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>  @Override<a name="line.302"></a>
+<span class="sourceLineNo">303</span>  public ClusterConnection getConnection() {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    return this.connection;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  }<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span>  @Override<a name="line.307"></a>
+<span class="sourceLineNo">308</span>  public ServerName getServerName() {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    return MOCK_MASTER_SERVERNAME;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>  }<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span>  @Override<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    return super.getCoordinatedStateManager();<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>  private static class MockRegionStateStore extends RegionStateStore {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    public MockRegionStateStore(final MasterServices master) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      super(master);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    }<a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>    @Override<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    public void updateRegionLocation(RegionStateNode regionNode) throws IOException {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  }<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>  @Override<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  public TableDescriptors getTableDescriptors() {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    return new TableDescriptors() {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      @Override<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      public TableDescriptor remove(TableName tablename) throws IOException {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        // noop<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        return null;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
 <span class="sourceLineNo">336</span>      @Override<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      public TableDescriptor remove(TableName tablename) throws IOException {<a name="line.337"></a>
+<span class="sourceLineNo">337</span>      public Map&lt;String, TableDescriptor&gt; getAll() throws IOException {<a name="line.337"></a>
 <span class="sourceLineNo">338</span>        // noop<a name="line.338"></a>
 <span class="sourceLineNo">339</span>        return null;<a name="line.339"></a>
 <span class="sourceLineNo">340</span>      }<a name="line.340"></a>
 <span class="sourceLineNo">341</span><a name="line.341"></a>
 <span class="sourceLineNo">342</span>      @Override<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      public Map&lt;String, TableDescriptor&gt; getAll() throws IOException {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        // noop<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        return null;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      }<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>      @Override<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      public TableDescriptor get(TableName tablename) throws IOException {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>        TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tablename);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        builder.setColumnFamily(ColumnFamilyDescriptorBuilder.of(DEFAULT_COLUMN_FAMILY_NAME));<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        return builder.build();<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      }<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span>      @Override<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      public Map&lt;String, TableDescriptor&gt; getByNamespace(String name) throws IOException {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        return null;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>      @Override<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      public void add(TableDescriptor htd) throws IOException {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        // noop<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      }<a name="line.363"></a>
-<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>      @Override<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      public void setCacheOn() throws IOException {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      }<a name="line.367"></a>
+<span class="sourceLineNo">343</span>      public TableDescriptor get(TableName tablename) throws IOException {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tablename);<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        builder.setColumnFamily(ColumnFamilyDescriptorBuilder.of(DEFAULT_COLUMN_FAMILY_NAME));<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        return builder.build();<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span>      @Override<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      public Map&lt;String, TableDescriptor&gt; getByNamespace(String name) throws IOException {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>        return null;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>      @Override<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      public void add(TableDescriptor htd) throws IOException {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        // noop<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>      @Override<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      public void setCacheOn() throws IOException {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      }<a name="line.361"></a>
+<span class="sourceLineNo">362</span><a name="line.362"></a>
+<span class="sourceLineNo">363</span>      @Override<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      public void setCacheOff() throws IOException {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      }<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    };<a name="line.366"></a>
+<span class="sourceLineNo">367</span>  }<a name="line.367"></a>
 <span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>      @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      public void setCacheOff() throws IOException {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    };<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>  private static MultiResponse buildMultiResponse(MultiRequest req) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    MultiResponse.Builder builder = MultiResponse.newBuilder();<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    RegionActionResult.Builder regionActionResultBuilder =<a name="line.377"></a>
-<span class="sourceLineNo">378</span>        RegionActionResult.newBuilder();<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    ResultOrException.Builder roeBuilder = ResultOrException.newBuilder();<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    for (RegionAction regionAction: req.getRegionActionList()) {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      regionActionResultBuilder.clear();<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      for (ClientProtos.Action action: regionAction.getActionList()) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        roeBuilder.clear();<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        roeBuilder.setResult(ClientProtos.Result.getDefaultInstance());<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        roeBuilder.setIndex(action.getIndex());<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        regionActionResultBuilder.addResultOrException(roeBuilder.build());<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      builder.addRegionActionResult(regionActionResultBuilder.build());<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    return builder.build();<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
-<span class="sourceLineNo">392</span>}<a name="line.392"></a>
+<span class="sourceLineNo">369</span>  private static MultiResponse buildMultiResponse(MultiRequest req) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    MultiResponse.Builder builder = MultiResponse.newBuilder();<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    RegionActionResult.Builder regionActionResultBuilder =<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        RegionActionResult.newBuilder();<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    ResultOrException.Builder roeBuilder = ResultOrException.newBuilder();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    for (RegionAction regionAction: req.getRegionActionList()) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      regionActionResultBuilder.clear();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      for (ClientProtos.Action action: regionAction.getActionList()) {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        roeBuilder.clear();<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        roeBuilder.setResult(ClientProtos.Result.getDefaultInstance());<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        roeBuilder.setIndex(action.getIndex());<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        regionActionResultBuilder.addResultOrException(roeBuilder.build());<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      builder.addRegionActionResult(regionActionResultBuilder.build());<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    return builder.build();<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  }<a name="line.385"></a>
+<span class="sourceLineNo">386</span>}<a name="line.386"></a>
 
 
 


[04/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/testdevapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/overview-tree.html b/testdevapidocs/overview-tree.html
index a533231..c0be152 100644
--- a/testdevapidocs/overview-tree.html
+++ b/testdevapidocs/overview-tree.html
@@ -598,6 +598,11 @@
 </li>
 </ul>
 </li>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.AssignmentManager (implements org.apache.hadoop.hbase.master.ServerListener)
+<ul>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportOnlineRegionsRace.AssignmentManagerForTest</span></a></li>
+</ul>
+</li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/AssignmentTestingUtil.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">AssignmentTestingUtil</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.AvlUtil.AvlNode&lt;TNode&gt;
 <ul>
@@ -1103,6 +1108,7 @@
 <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.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.<a href="org/apache/hadoop/hbase/master/TestShutdownBackupMaster.MockHMaster.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestShutdownBackupMaster.MockHMaster</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.MyMaster.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestSplitTransactionOnCluster.MyMaster</span></a></li>
 </ul>
@@ -3562,6 +3568,7 @@
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestReplicaWithCluster.RegionServerHostingPrimayMetaRegionSlowOrStopCopro.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestReplicaWithCluster.RegionServerHostingPrimayMetaRegionSlowOrStopCopro</span></a> (implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor, org.apache.hadoop.hbase.coprocessor.RegionObserver)</li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestReplicaWithCluster.RegionServerStoppedCopro.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestReplicaWithCluster.RegionServerStoppedCopro</span></a> (implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor, org.apache.hadoop.hbase.coprocessor.RegionObserver)</li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestReplicaWithCluster.SlowMeCopro.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestReplicaWithCluster.SlowMeCopro</span></a> (implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor, org.apache.hadoop.hbase.coprocessor.RegionObserver)</li>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportOnlineRegionsRace</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/TestReseekTo.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TestReseekTo</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestResettingCounters.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestResettingCounters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/TestResourceFilter.html" title="class in org.apache.hadoop.hbase.rest"><span class="typeNameLink">TestResourceFilter</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.MockRegionStateStore.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.MockRegionStateStore.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.MockRegionStateStore.html
index 561840d..747222d 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.MockRegionStateStore.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/MockMasterServices.MockRegionStateStore.html
@@ -41,363 +41,357 @@
 <span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.ServerName;<a name="line.33"></a>
 <span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.TableDescriptors;<a name="line.34"></a>
 <span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.TableName;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.YouAreDeadException;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.HConnectionTestingUtility;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.master.MasterWalManager;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.master.MockNoopMasterServices;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.ServerManager;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.TableStateManager;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.procedure2.store.NoopProcedureStore;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureStoreListener;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.zookeeper.KeeperException;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.mockito.Mockito;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.mockito.invocation.InvocationOnMock;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.mockito.stubbing.Answer;<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException;<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>/**<a name="line.82"></a>
-<span class="sourceLineNo">083</span> * A mocked master services.<a name="line.83"></a>
-<span class="sourceLineNo">084</span> * Tries to fake it. May not always work.<a name="line.84"></a>
-<span class="sourceLineNo">085</span> */<a name="line.85"></a>
-<span class="sourceLineNo">086</span>public class MockMasterServices extends MockNoopMasterServices {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private final MasterFileSystem fileSystemManager;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  private final MasterWalManager walManager;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private final AssignmentManager assignmentManager;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private final TableStateManager tableStateManager;<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  private MasterProcedureEnv procedureEnv;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  private ProcedureExecutor&lt;MasterProcedureEnv&gt; procedureExecutor;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  private ProcedureStore procedureStore;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private final ClusterConnection connection;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  private final LoadBalancer balancer;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private final ServerManager serverManager;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  // Set of regions on a 'server'. Populated externally. Used in below faking 'cluster'.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private final NavigableMap&lt;ServerName, SortedSet&lt;byte []&gt;&gt; regionsToRegionServers;<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private final ProcedureEvent initialized = new ProcedureEvent("master initialized");<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  public static final String DEFAULT_COLUMN_FAMILY_NAME = "cf";<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  public static final ServerName MOCK_MASTER_SERVERNAME =<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      ServerName.valueOf("mockmaster.example.org", 1234, -1L);<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public MockMasterServices(Configuration conf,<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      NavigableMap&lt;ServerName, SortedSet&lt;byte []&gt;&gt; regionsToRegionServers)<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  throws IOException {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    super(conf);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    this.regionsToRegionServers = regionsToRegionServers;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    Superusers.initialize(conf);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    this.walManager = new MasterWalManager(this);<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    // Mock an AM.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    this.assignmentManager = new AssignmentManager(this, new MockRegionStateStore(this)) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      @Override<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      public boolean isTableEnabled(final TableName tableName) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>        return true;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      }<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>      @Override<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      public boolean isTableDisabled(final TableName tableName) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>        return false;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      }<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>      @Override<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      protected boolean waitServerReportEvent(ServerName serverName, Procedure proc) {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        // Make a report with current state of the server 'serverName' before we call wait..<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        SortedSet&lt;byte []&gt; regions = regionsToRegionServers.get(serverName);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>        try {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>          getAssignmentManager().reportOnlineRegions(serverName,<a name="line.131"></a>
-<span class="sourceLineNo">132</span>              regions == null? new HashSet&lt;byte []&gt;(): regions);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>        } catch (YouAreDeadException e) {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>          throw new RuntimeException(e);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>        }<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        return super.waitServerReportEvent(serverName, proc);<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      }<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    };<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    this.balancer = LoadBalancerFactory.getLoadBalancer(conf);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    this.serverManager = new ServerManager(this);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    this.tableStateManager = Mockito.mock(TableStateManager.class);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    Mockito.when(this.tableStateManager.getTableState(Mockito.any())).<a name="line.142"></a>
-<span class="sourceLineNo">143</span>        thenReturn(new TableState(TableName.valueOf("AnyTableNameSetInMockMasterServcies"),<a name="line.143"></a>
-<span class="sourceLineNo">144</span>            TableState.State.ENABLED));<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>    // Mock up a Client Interface<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    ClientProtos.ClientService.BlockingInterface ri =<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        Mockito.mock(ClientProtos.ClientService.BlockingInterface.class);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    MutateResponse.Builder builder = MutateResponse.newBuilder();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    builder.setProcessed(true);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    try {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      Mockito.when(ri.mutate(any(), any())).thenReturn(builder.build());<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    } catch (ServiceException se) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      throw ProtobufUtil.handleRemoteException(se);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    try {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      Mockito.when(ri.multi(any(), any())).thenAnswer(new Answer&lt;MultiResponse&gt;() {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>          @Override<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          public MultiResponse answer(InvocationOnMock invocation) throws Throwable {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            return buildMultiResponse(invocation.getArgument(1));<a name="line.160"></a>
-<span class="sourceLineNo">161</span>          }<a name="line.161"></a>
-<span class="sourceLineNo">162</span>        });<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    } catch (ServiceException se) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      throw ProtobufUtil.getRemoteException(se);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    // Mock n ClusterConnection and an AdminProtocol implementation. Have the<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    // ClusterConnection return the HRI.  Have the HRI return a few mocked up responses<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    // to make our test work.<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    this.connection =<a name="line.169"></a>
-<span class="sourceLineNo">170</span>        HConnectionTestingUtility.getMockedConnectionAndDecorate(getConfiguration(),<a name="line.170"></a>
-<span class="sourceLineNo">171</span>          Mockito.mock(AdminProtos.AdminService.BlockingInterface.class), ri, MOCK_MASTER_SERVERNAME,<a name="line.171"></a>
-<span class="sourceLineNo">172</span>          RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    // Set hbase.rootdir into test dir.<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    Path rootdir = FSUtils.getRootDir(getConfiguration());<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    FSUtils.setRootDir(getConfiguration(), rootdir);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    Mockito.mock(AdminProtos.AdminService.BlockingInterface.class);<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  public void start(final int numServes, final RSProcedureDispatcher remoteDispatcher)<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      throws IOException, KeeperException {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    startProcedureExecutor(remoteDispatcher);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    this.assignmentManager.start();<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    for (int i = 0; i &lt; numServes; ++i) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      ServerName sn = ServerName.valueOf("localhost", 100 + i, 1);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      serverManager.regionServerReport(sn, new ServerLoad(ServerMetricsBuilder.of(sn)));<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    }<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    this.procedureExecutor.getEnvironment().setEventReady(initialized, true);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  /**<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * Call this restart method only after running MockMasterServices#start()<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * The RSs can be differentiated by the port number, see<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   * ServerName in MockMasterServices#start() method above.<a name="line.193"></a>
-<span class="sourceLineNo">194</span>   * Restart of region server will have new startcode in server name<a name="line.194"></a>
-<span class="sourceLineNo">195</span>   *<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   * @param serverName Server name to be restarted<a name="line.196"></a>
-<span class="sourceLineNo">197</span>   */<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  public void restartRegionServer(ServerName serverName) throws IOException {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    List&lt;ServerName&gt; onlineServers = serverManager.getOnlineServersList();<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    long startCode = -1;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    for (ServerName s : onlineServers) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      if (s.getAddress().equals(serverName.getAddress())) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        startCode = s.getStartcode() + 1;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        break;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      }<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    if (startCode == -1) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      return;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    ServerName sn = ServerName.valueOf(serverName.getAddress().toString(), startCode);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    serverManager.regionServerReport(sn, new ServerLoad(ServerMetricsBuilder.of(sn)));<a name="line.211"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.HConnectionTestingUtility;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.master.MasterWalManager;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.master.MockNoopMasterServices;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.master.ServerManager;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.TableStateManager;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.procedure2.store.NoopProcedureStore;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureStoreListener;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.zookeeper.KeeperException;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.mockito.Mockito;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.mockito.invocation.InvocationOnMock;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.mockito.stubbing.Answer;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException;<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>/**<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * A mocked master services.<a name="line.81"></a>
+<span class="sourceLineNo">082</span> * Tries to fake it. May not always work.<a name="line.82"></a>
+<span class="sourceLineNo">083</span> */<a name="line.83"></a>
+<span class="sourceLineNo">084</span>public class MockMasterServices extends MockNoopMasterServices {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  private final MasterFileSystem fileSystemManager;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private final MasterWalManager walManager;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  private final AssignmentManager assignmentManager;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private final TableStateManager tableStateManager;<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  private MasterProcedureEnv procedureEnv;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private ProcedureExecutor&lt;MasterProcedureEnv&gt; procedureExecutor;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private ProcedureStore procedureStore;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  private final ClusterConnection connection;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  private final LoadBalancer balancer;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  private final ServerManager serverManager;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  // Set of regions on a 'server'. Populated externally. Used in below faking 'cluster'.<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  private final NavigableMap&lt;ServerName, SortedSet&lt;byte []&gt;&gt; regionsToRegionServers;<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  private final ProcedureEvent initialized = new ProcedureEvent("master initialized");<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  public static final String DEFAULT_COLUMN_FAMILY_NAME = "cf";<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  public static final ServerName MOCK_MASTER_SERVERNAME =<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      ServerName.valueOf("mockmaster.example.org", 1234, -1L);<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  public MockMasterServices(Configuration conf,<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      NavigableMap&lt;ServerName, SortedSet&lt;byte []&gt;&gt; regionsToRegionServers)<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  throws IOException {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    super(conf);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    this.regionsToRegionServers = regionsToRegionServers;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    Superusers.initialize(conf);<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    this.walManager = new MasterWalManager(this);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    // Mock an AM.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    this.assignmentManager = new AssignmentManager(this, new MockRegionStateStore(this)) {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      @Override<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      public boolean isTableEnabled(final TableName tableName) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        return true;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      }<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>      @Override<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      public boolean isTableDisabled(final TableName tableName) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>        return false;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      }<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>      @Override<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      protected boolean waitServerReportEvent(ServerName serverName, Procedure proc) {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>        // Make a report with current state of the server 'serverName' before we call wait..<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(serverName);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        getAssignmentManager().reportOnlineRegions(serverName,<a name="line.128"></a>
+<span class="sourceLineNo">129</span>          regions == null ? new HashSet&lt;byte[]&gt;() : regions);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        return super.waitServerReportEvent(serverName, proc);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      }<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    };<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    this.balancer = LoadBalancerFactory.getLoadBalancer(conf);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    this.serverManager = new ServerManager(this);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    this.tableStateManager = Mockito.mock(TableStateManager.class);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    Mockito.when(this.tableStateManager.getTableState(Mockito.any())).<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        thenReturn(new TableState(TableName.valueOf("AnyTableNameSetInMockMasterServcies"),<a name="line.137"></a>
+<span class="sourceLineNo">138</span>            TableState.State.ENABLED));<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>    // Mock up a Client Interface<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    ClientProtos.ClientService.BlockingInterface ri =<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        Mockito.mock(ClientProtos.ClientService.BlockingInterface.class);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    MutateResponse.Builder builder = MutateResponse.newBuilder();<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    builder.setProcessed(true);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    try {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      Mockito.when(ri.mutate(any(), any())).thenReturn(builder.build());<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    } catch (ServiceException se) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      throw ProtobufUtil.handleRemoteException(se);<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    }<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    try {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      Mockito.when(ri.multi(any(), any())).thenAnswer(new Answer&lt;MultiResponse&gt;() {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>          @Override<a name="line.152"></a>
+<span class="sourceLineNo">153</span>          public MultiResponse answer(InvocationOnMock invocation) throws Throwable {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>            return buildMultiResponse(invocation.getArgument(1));<a name="line.154"></a>
+<span class="sourceLineNo">155</span>          }<a name="line.155"></a>
+<span class="sourceLineNo">156</span>        });<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    } catch (ServiceException se) {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      throw ProtobufUtil.getRemoteException(se);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    }<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    // Mock n ClusterConnection and an AdminProtocol implementation. Have the<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    // ClusterConnection return the HRI.  Have the HRI return a few mocked up responses<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // to make our test work.<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    this.connection =<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        HConnectionTestingUtility.getMockedConnectionAndDecorate(getConfiguration(),<a name="line.164"></a>
+<span class="sourceLineNo">165</span>          Mockito.mock(AdminProtos.AdminService.BlockingInterface.class), ri, MOCK_MASTER_SERVERNAME,<a name="line.165"></a>
+<span class="sourceLineNo">166</span>          RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    // Set hbase.rootdir into test dir.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    Path rootdir = FSUtils.getRootDir(getConfiguration());<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    FSUtils.setRootDir(getConfiguration(), rootdir);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    Mockito.mock(AdminProtos.AdminService.BlockingInterface.class);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
+<span class="sourceLineNo">172</span><a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public void start(final int numServes, final RSProcedureDispatcher remoteDispatcher)<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      throws IOException, KeeperException {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    startProcedureExecutor(remoteDispatcher);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    this.assignmentManager.start();<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    for (int i = 0; i &lt; numServes; ++i) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      ServerName sn = ServerName.valueOf("localhost", 100 + i, 1);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      serverManager.regionServerReport(sn, new ServerLoad(ServerMetricsBuilder.of(sn)));<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    this.procedureExecutor.getEnvironment().setEventReady(initialized, true);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>  /**<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   * Call this restart method only after running MockMasterServices#start()<a name="line.185"></a>
+<span class="sourceLineNo">186</span>   * The RSs can be differentiated by the port number, see<a name="line.186"></a>
+<span class="sourceLineNo">187</span>   * ServerName in MockMasterServices#start() method above.<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   * Restart of region server will have new startcode in server name<a name="line.188"></a>
+<span class="sourceLineNo">189</span>   *<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * @param serverName Server name to be restarted<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   */<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  public void restartRegionServer(ServerName serverName) throws IOException {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    List&lt;ServerName&gt; onlineServers = serverManager.getOnlineServersList();<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    long startCode = -1;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    for (ServerName s : onlineServers) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      if (s.getAddress().equals(serverName.getAddress())) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        startCode = s.getStartcode() + 1;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        break;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    if (startCode == -1) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      return;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    ServerName sn = ServerName.valueOf(serverName.getAddress().toString(), startCode);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    serverManager.regionServerReport(sn, new ServerLoad(ServerMetricsBuilder.of(sn)));<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>  @Override<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  public void stop(String why) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    stopProcedureExecutor();<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    this.assignmentManager.stop();<a name="line.211"></a>
 <span class="sourceLineNo">212</span>  }<a name="line.212"></a>
 <span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>  @Override<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  public void stop(String why) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    stopProcedureExecutor();<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    this.assignmentManager.stop();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  }<a name="line.218"></a>
+<span class="sourceLineNo">214</span>  private void startProcedureExecutor(final RSProcedureDispatcher remoteDispatcher)<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      throws IOException {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    final Configuration conf = getConfiguration();<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    this.procedureStore = new NoopProcedureStore();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    this.procedureStore.registerListener(new ProcedureStoreListener() {<a name="line.218"></a>
 <span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>  private void startProcedureExecutor(final RSProcedureDispatcher remoteDispatcher)<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      throws IOException {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    final Configuration conf = getConfiguration();<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    this.procedureStore = new NoopProcedureStore();<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    this.procedureStore.registerListener(new ProcedureStoreListener() {<a name="line.224"></a>
+<span class="sourceLineNo">220</span>      @Override<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      public void abortProcess() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        abort("The Procedure Store lost the lease", null);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      }<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    });<a name="line.224"></a>
 <span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>      @Override<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      public void abortProcess() {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        abort("The Procedure Store lost the lease", null);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      }<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    });<a name="line.230"></a>
+<span class="sourceLineNo">226</span>    this.procedureEnv = new MasterProcedureEnv(this,<a name="line.226"></a>
+<span class="sourceLineNo">227</span>       remoteDispatcher != null ? remoteDispatcher : new RSProcedureDispatcher(this));<a name="line.227"></a>
+<span class="sourceLineNo">228</span><a name="line.228"></a>
+<span class="sourceLineNo">229</span>    this.procedureExecutor = new ProcedureExecutor&lt;&gt;(conf, procedureEnv, procedureStore,<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      procedureEnv.getProcedureScheduler());<a name="line.230"></a>
 <span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span>    this.procedureEnv = new MasterProcedureEnv(this,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>       remoteDispatcher != null ? remoteDispatcher : new RSProcedureDispatcher(this));<a name="line.233"></a>
-<span class="sourceLineNo">234</span><a name="line.234"></a>
-<span class="sourceLineNo">235</span>    this.procedureExecutor = new ProcedureExecutor&lt;&gt;(conf, procedureEnv, procedureStore,<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      procedureEnv.getProcedureScheduler());<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>    final int numThreads = conf.getInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS,<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        Math.max(Runtime.getRuntime().availableProcessors(),<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          MasterProcedureConstants.DEFAULT_MIN_MASTER_PROCEDURE_THREADS));<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    final boolean abortOnCorruption = conf.getBoolean(<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        MasterProcedureConstants.EXECUTOR_ABORT_ON_CORRUPTION,<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        MasterProcedureConstants.DEFAULT_EXECUTOR_ABORT_ON_CORRUPTION);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    this.procedureStore.start(numThreads);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    ProcedureTestingUtility.initAndStartWorkers(procedureExecutor, numThreads, abortOnCorruption);<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    this.procedureEnv.getRemoteDispatcher().start();<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>  private void stopProcedureExecutor() {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    if (this.procedureEnv != null) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      this.procedureEnv.getRemoteDispatcher().stop();<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>    if (this.procedureExecutor != null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      this.procedureExecutor.stop();<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>    if (this.procedureStore != null) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      this.procedureStore.stop(isAborted());<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>  @Override<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  public boolean isInitialized() {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    return true;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>  }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span>  @Override<a name="line.268"></a>
-<span class="sourceLineNo">269</span>  public ProcedureEvent getInitializedEvent() {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    return this.initialized;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  @Override<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  public MasterFileSystem getMasterFileSystem() {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    return fileSystemManager;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span>  @Override<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  public MasterWalManager getMasterWalManager() {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    return walManager;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  }<a name="line.281"></a>
-<span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>  @Override<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  public ProcedureExecutor&lt;MasterProcedureEnv&gt; getMasterProcedureExecutor() {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    return procedureExecutor;<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span>  @Override<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  public LoadBalancer getLoadBalancer() {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    return balancer;<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>  @Override<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  public ServerManager getServerManager() {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    return serverManager;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  @Override<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  public AssignmentManager getAssignmentManager() {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    return assignmentManager;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span>  @Override<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  public TableStateManager getTableStateManager() {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    return tableStateManager;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>  @Override<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  public ClusterConnection getConnection() {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    return this.connection;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  }<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span>  @Override<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  public ServerName getServerName() {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    return MOCK_MASTER_SERVERNAME;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  }<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span>  @Override<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    return super.getCoordinatedStateManager();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span>  private static class MockRegionStateStore extends RegionStateStore {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    public MockRegionStateStore(final MasterServices master) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      super(master);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    }<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>    @Override<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    public void updateRegionLocation(RegionStateNode regionNode) throws IOException {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
-<span class="sourceLineNo">331</span>  }<a name="line.331"></a>
-<span class="sourceLineNo">332</span><a name="line.332"></a>
-<span class="sourceLineNo">333</span>  @Override<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  public TableDescriptors getTableDescriptors() {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    return new TableDescriptors() {<a name="line.335"></a>
+<span class="sourceLineNo">232</span>    final int numThreads = conf.getInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS,<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        Math.max(Runtime.getRuntime().availableProcessors(),<a name="line.233"></a>
+<span class="sourceLineNo">234</span>          MasterProcedureConstants.DEFAULT_MIN_MASTER_PROCEDURE_THREADS));<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    final boolean abortOnCorruption = conf.getBoolean(<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        MasterProcedureConstants.EXECUTOR_ABORT_ON_CORRUPTION,<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        MasterProcedureConstants.DEFAULT_EXECUTOR_ABORT_ON_CORRUPTION);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    this.procedureStore.start(numThreads);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    ProcedureTestingUtility.initAndStartWorkers(procedureExecutor, numThreads, abortOnCorruption);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    this.procedureEnv.getRemoteDispatcher().start();<a name="line.240"></a>
+<span class="sourceLineNo">241</span>  }<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span>  private void stopProcedureExecutor() {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    if (this.procedureEnv != null) {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      this.procedureEnv.getRemoteDispatcher().stop();<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>    if (this.procedureExecutor != null) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      this.procedureExecutor.stop();<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>    if (this.procedureStore != null) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      this.procedureStore.stop(isAborted());<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    }<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>  @Override<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  public boolean isInitialized() {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    return true;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>  }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span>  @Override<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  public ProcedureEvent getInitializedEvent() {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    return this.initialized;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  }<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>  @Override<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  public MasterFileSystem getMasterFileSystem() {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    return fileSystemManager;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>  }<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>  @Override<a name="line.272"></a>
+<span class="sourceLineNo">273</span>  public MasterWalManager getMasterWalManager() {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    return walManager;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  }<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>  @Override<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  public ProcedureExecutor&lt;MasterProcedureEnv&gt; getMasterProcedureExecutor() {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    return procedureExecutor;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>  @Override<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public LoadBalancer getLoadBalancer() {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    return balancer;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  }<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span>  @Override<a name="line.287"></a>
+<span class="sourceLineNo">288</span>  public ServerManager getServerManager() {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    return serverManager;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  }<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span>  @Override<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  public AssignmentManager getAssignmentManager() {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    return assignmentManager;<a name="line.294"></a>
+<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
+<span class="sourceLineNo">296</span><a name="line.296"></a>
+<span class="sourceLineNo">297</span>  @Override<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  public TableStateManager getTableStateManager() {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    return tableStateManager;<a name="line.299"></a>
+<span class="sourceLineNo">300</span>  }<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>  @Override<a name="line.302"></a>
+<span class="sourceLineNo">303</span>  public ClusterConnection getConnection() {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    return this.connection;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  }<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span>  @Override<a name="line.307"></a>
+<span class="sourceLineNo">308</span>  public ServerName getServerName() {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    return MOCK_MASTER_SERVERNAME;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>  }<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span>  @Override<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    return super.getCoordinatedStateManager();<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>  private static class MockRegionStateStore extends RegionStateStore {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    public MockRegionStateStore(final MasterServices master) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      super(master);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    }<a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>    @Override<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    public void updateRegionLocation(RegionStateNode regionNode) throws IOException {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  }<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>  @Override<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  public TableDescriptors getTableDescriptors() {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    return new TableDescriptors() {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      @Override<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      public TableDescriptor remove(TableName tablename) throws IOException {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        // noop<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        return null;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
 <span class="sourceLineNo">336</span>      @Override<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      public TableDescriptor remove(TableName tablename) throws IOException {<a name="line.337"></a>
+<span class="sourceLineNo">337</span>      public Map&lt;String, TableDescriptor&gt; getAll() throws IOException {<a name="line.337"></a>
 <span class="sourceLineNo">338</span>        // noop<a name="line.338"></a>
 <span class="sourceLineNo">339</span>        return null;<a name="line.339"></a>
 <span class="sourceLineNo">340</span>      }<a name="line.340"></a>
 <span class="sourceLineNo">341</span><a name="line.341"></a>
 <span class="sourceLineNo">342</span>      @Override<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      public Map&lt;String, TableDescriptor&gt; getAll() throws IOException {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        // noop<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        return null;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      }<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>      @Override<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      public TableDescriptor get(TableName tablename) throws IOException {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>        TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tablename);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        builder.setColumnFamily(ColumnFamilyDescriptorBuilder.of(DEFAULT_COLUMN_FAMILY_NAME));<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        return builder.build();<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      }<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span>      @Override<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      public Map&lt;String, TableDescriptor&gt; getByNamespace(String name) throws IOException {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        return null;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>      @Override<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      public void add(TableDescriptor htd) throws IOException {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        // noop<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      }<a name="line.363"></a>
-<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>      @Override<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      public void setCacheOn() throws IOException {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      }<a name="line.367"></a>
+<span class="sourceLineNo">343</span>      public TableDescriptor get(TableName tablename) throws IOException {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tablename);<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        builder.setColumnFamily(ColumnFamilyDescriptorBuilder.of(DEFAULT_COLUMN_FAMILY_NAME));<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        return builder.build();<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span>      @Override<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      public Map&lt;String, TableDescriptor&gt; getByNamespace(String name) throws IOException {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>        return null;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>      @Override<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      public void add(TableDescriptor htd) throws IOException {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        // noop<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>      @Override<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      public void setCacheOn() throws IOException {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      }<a name="line.361"></a>
+<span class="sourceLineNo">362</span><a name="line.362"></a>
+<span class="sourceLineNo">363</span>      @Override<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      public void setCacheOff() throws IOException {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      }<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    };<a name="line.366"></a>
+<span class="sourceLineNo">367</span>  }<a name="line.367"></a>
 <span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>      @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      public void setCacheOff() throws IOException {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    };<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>  private static MultiResponse buildMultiResponse(MultiRequest req) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    MultiResponse.Builder builder = MultiResponse.newBuilder();<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    RegionActionResult.Builder regionActionResultBuilder =<a name="line.377"></a>
-<span class="sourceLineNo">378</span>        RegionActionResult.newBuilder();<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    ResultOrException.Builder roeBuilder = ResultOrException.newBuilder();<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    for (RegionAction regionAction: req.getRegionActionList()) {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      regionActionResultBuilder.clear();<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      for (ClientProtos.Action action: regionAction.getActionList()) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        roeBuilder.clear();<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        roeBuilder.setResult(ClientProtos.Result.getDefaultInstance());<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        roeBuilder.setIndex(action.getIndex());<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        regionActionResultBuilder.addResultOrException(roeBuilder.build());<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      builder.addRegionActionResult(regionActionResultBuilder.build());<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    return builder.build();<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
-<span class="sourceLineNo">392</span>}<a name="line.392"></a>
+<span class="sourceLineNo">369</span>  private static MultiResponse buildMultiResponse(MultiRequest req) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    MultiResponse.Builder builder = MultiResponse.newBuilder();<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    RegionActionResult.Builder regionActionResultBuilder =<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        RegionActionResult.newBuilder();<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    ResultOrException.Builder roeBuilder = ResultOrException.newBuilder();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    for (RegionAction regionAction: req.getRegionActionList()) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      regionActionResultBuilder.clear();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      for (ClientProtos.Action action: regionAction.getActionList()) {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        roeBuilder.clear();<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        roeBuilder.setResult(ClientProtos.Result.getDefaultInstance());<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        roeBuilder.setIndex(action.getIndex());<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        regionActionResultBuilder.addResultOrException(roeBuilder.build());<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      builder.addRegionActionResult(regionActionResultBuilder.build());<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    return builder.build();<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  }<a name="line.385"></a>
+<span class="sourceLineNo">386</span>}<a name="line.386"></a>
 
 
 


[09/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html
index 98ef11a..ab175b6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html
@@ -256,1168 +256,1169 @@
 <span class="sourceLineNo">248</span>    this.leaseRecovery = leaseRecovery;<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    this.walDir = walDir;<a name="line.249"></a>
 <span class="sourceLineNo">250</span>    this.walArchiveDir = walArchiveDir;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    this.fs = walDir.getFileSystem(conf);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    this.enforceStreamCapability = conf.getBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE, true);<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>    // Create the log directory for the procedure store<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    if (!fs.exists(walDir)) {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      if (!fs.mkdirs(walDir)) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        throw new IOException("Unable to mkdir " + walDir);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    // Now that it exists, set the log policy<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    String storagePolicy =<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        conf.get(HConstants.WAL_STORAGE_POLICY, HConstants.DEFAULT_WAL_STORAGE_POLICY);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    CommonFSUtils.setStoragePolicy(fs, walDir, storagePolicy);<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>    // Create archive dir up front. Rename won't work w/o it up on HDFS.<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    if (this.walArchiveDir != null &amp;&amp; !this.fs.exists(this.walArchiveDir)) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      if (this.fs.mkdirs(this.walArchiveDir)) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        LOG.debug("Created Procedure Store WAL archive dir {}", this.walArchiveDir);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      } else {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        LOG.warn("Failed create of {}", this.walArchiveDir);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      }<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>  @Override<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public void start(int numSlots) throws IOException {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    if (!setRunning(true)) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      return;<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>    // Init buffer slots<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    loading.set(true);<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    runningProcCount = numSlots;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    syncMaxSlot = numSlots;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    slots = new ByteSlot[numSlots];<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    slotsCache = new LinkedTransferQueue&lt;&gt;();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    while (slotsCache.size() &lt; numSlots) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      slotsCache.offer(new ByteSlot());<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>    // Tunings<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    walCountWarnThreshold =<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      conf.getInt(WAL_COUNT_WARN_THRESHOLD_CONF_KEY, DEFAULT_WAL_COUNT_WARN_THRESHOLD);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    maxRetriesBeforeRoll =<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      conf.getInt(MAX_RETRIES_BEFORE_ROLL_CONF_KEY, DEFAULT_MAX_RETRIES_BEFORE_ROLL);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    maxSyncFailureRoll = conf.getInt(MAX_SYNC_FAILURE_ROLL_CONF_KEY, DEFAULT_MAX_SYNC_FAILURE_ROLL);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    waitBeforeRoll = conf.getInt(WAIT_BEFORE_ROLL_CONF_KEY, DEFAULT_WAIT_BEFORE_ROLL);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    rollRetries = conf.getInt(ROLL_RETRIES_CONF_KEY, DEFAULT_ROLL_RETRIES);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    rollThreshold = conf.getLong(ROLL_THRESHOLD_CONF_KEY, DEFAULT_ROLL_THRESHOLD);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    periodicRollMsec = conf.getInt(PERIODIC_ROLL_CONF_KEY, DEFAULT_PERIODIC_ROLL);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    syncWaitMsec = conf.getInt(SYNC_WAIT_MSEC_CONF_KEY, DEFAULT_SYNC_WAIT_MSEC);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    useHsync = conf.getBoolean(USE_HSYNC_CONF_KEY, DEFAULT_USE_HSYNC);<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span>    // WebUI<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    syncMetricsQueue = new CircularFifoQueue&lt;&gt;(<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      conf.getInt(STORE_WAL_SYNC_STATS_COUNT, DEFAULT_SYNC_STATS_COUNT));<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>    // Init sync thread<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    syncThread = new Thread("WALProcedureStoreSyncThread") {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      @Override<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      public void run() {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>        try {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>          syncLoop();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>        } catch (Throwable e) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>          LOG.error("Got an exception from the sync-loop", e);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          if (!isSyncAborted()) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>            sendAbortProcessSignal();<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      }<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    };<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    syncThread.start();<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  @Override<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  public void stop(final boolean abort) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    if (!setRunning(false)) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      return;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    }<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>    LOG.info("Stopping the WAL Procedure Store, isAbort=" + abort +<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      (isSyncAborted() ? " (self aborting)" : ""));<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    sendStopSignal();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    if (!isSyncAborted()) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      try {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        while (syncThread.isAlive()) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>          sendStopSignal();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>          syncThread.join(250);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      } catch (InterruptedException e) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        LOG.warn("join interrupted", e);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        Thread.currentThread().interrupt();<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>    // Close the writer<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    closeCurrentLogStream(abort);<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    // Close the old logs<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    // they should be already closed, this is just in case the load fails<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    // and we call start() and then stop()<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    for (ProcedureWALFile log: logs) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      log.close();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    logs.clear();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    loading.set(true);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  private void sendStopSignal() {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    if (lock.tryLock()) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      try {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        waitCond.signalAll();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        syncCond.signalAll();<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      } finally {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        lock.unlock();<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      }<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  }<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>  @Override<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  public int getNumThreads() {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    return slots == null ? 0 : slots.length;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>  @Override<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  public int setRunningProcedureCount(final int count) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    this.runningProcCount = count &gt; 0 ? Math.min(count, slots.length) : slots.length;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    return this.runningProcCount;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>  public ProcedureStoreTracker getStoreTracker() {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    return storeTracker;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  }<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>  public ArrayList&lt;ProcedureWALFile&gt; getActiveLogs() {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    lock.lock();<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      return new ArrayList&lt;&gt;(logs);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    } finally {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      lock.unlock();<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    }<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>  public Set&lt;ProcedureWALFile&gt; getCorruptedLogs() {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    return corruptedLogs;<a name="line.395"></a>
-<span class="sourceLineNo">396</span>  }<a name="line.396"></a>
-<span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span>  @Override<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  public void recoverLease() throws IOException {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    lock.lock();<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    try {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      LOG.debug("Starting WAL Procedure Store lease recovery");<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      boolean afterFirstAttempt = false;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      while (isRunning()) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        // Don't sleep before first attempt<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        if (afterFirstAttempt) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>          LOG.trace("Sleep {} ms after first lease recovery attempt.",<a name="line.407"></a>
-<span class="sourceLineNo">408</span>              waitBeforeRoll);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          Threads.sleepWithoutInterrupt(waitBeforeRoll);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>        } else {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>          afterFirstAttempt = true;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        FileStatus[] oldLogs = getLogFiles();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        // Get Log-MaxID and recover lease on old logs<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        try {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>          flushLogId = initOldLogs(oldLogs);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        } catch (FileNotFoundException e) {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>          LOG.warn("Someone else is active and deleted logs. retrying.", e);<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          continue;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>        // Create new state-log<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        if (!rollWriter(flushLogId + 1)) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          // someone else has already created this log<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          LOG.debug("Someone else has already created log {}. Retrying.", flushLogId);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>          continue;<a name="line.426"></a>
-<span class="sourceLineNo">427</span>        }<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>        // We have the lease on the log<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        oldLogs = getLogFiles();<a name="line.430"></a>
-<span class="sourceLineNo">431</span>        if (getMaxLogId(oldLogs) &gt; flushLogId) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>          LOG.debug("Someone else created new logs. Expected maxLogId &lt; {}", flushLogId);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>          logs.getLast().removeFile(this.walArchiveDir);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          continue;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>        }<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>        LOG.debug("Lease acquired for flushLogId={}", flushLogId);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        break;<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      }<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    } finally {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      lock.unlock();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  }<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>  @Override<a name="line.445"></a>
-<span class="sourceLineNo">446</span>  public void load(ProcedureLoader loader) throws IOException {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    lock.lock();<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    try {<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      if (logs.isEmpty()) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        throw new RuntimeException("recoverLease() must be called before loading data");<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      }<a name="line.451"></a>
-<span class="sourceLineNo">452</span><a name="line.452"></a>
-<span class="sourceLineNo">453</span>      // Nothing to do, If we have only the current log.<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      if (logs.size() == 1) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        LOG.debug("No state logs to replay.");<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        loader.setMaxProcId(0);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        return;<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // Load the old logs<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      Iterator&lt;ProcedureWALFile&gt; it = logs.descendingIterator();<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      it.next(); // Skip the current log<a name="line.462"></a>
-<span class="sourceLineNo">463</span><a name="line.463"></a>
-<span class="sourceLineNo">464</span>      ProcedureWALFormat.load(it, storeTracker, new ProcedureWALFormat.Loader() {<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>        @Override<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        public void setMaxProcId(long maxProcId) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>          loader.setMaxProcId(maxProcId);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>        }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>        @Override<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        public void load(ProcedureIterator procIter) throws IOException {<a name="line.472"></a>
-<span class="sourceLineNo">473</span>          loader.load(procIter);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        }<a name="line.474"></a>
-<span class="sourceLineNo">475</span><a name="line.475"></a>
-<span class="sourceLineNo">476</span>        @Override<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>          loader.handleCorrupted(procIter);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        }<a name="line.479"></a>
-<span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span>        @Override<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        public void markCorruptedWAL(ProcedureWALFile log, IOException e) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>          if (corruptedLogs == null) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>            corruptedLogs = new HashSet&lt;&gt;();<a name="line.484"></a>
-<span class="sourceLineNo">485</span>          }<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          corruptedLogs.add(log);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>          // TODO: sideline corrupted log<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      });<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    } finally {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      try {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        // try to cleanup inactive wals and complete the operation<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        buildHoldingCleanupTracker();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        tryCleanupLogsOnLoad();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        loading.set(false);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      } finally {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>        lock.unlock();<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    }<a name="line.499"></a>
-<span class="sourceLineNo">500</span>  }<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>  private void tryCleanupLogsOnLoad() {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    // nothing to cleanup.<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    if (logs.size() &lt;= 1) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      return;<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span>    // the config says to not cleanup wals on load.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    if (!conf.getBoolean(EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY,<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY)) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      LOG.debug("WALs cleanup on load is not enabled: " + getActiveLogs());<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      return;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    }<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>    try {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      periodicRoll();<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    } catch (IOException e) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      LOG.warn("Unable to cleanup logs on load: " + e.getMessage(), e);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    }<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>  @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span>  public void insert(Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (LOG.isTraceEnabled()) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.trace("Insert " + proc + ", subproc=" + Arrays.toString(subprocs));<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>    ByteSlot slot = acquireSlot();<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    try {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      // Serialize the insert<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      long[] subProcIds = null;<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      if (subprocs != null) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        ProcedureWALFormat.writeInsert(slot, proc, subprocs);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        subProcIds = new long[subprocs.length];<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          subProcIds[i] = subprocs[i].getProcId();<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        }<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      } else {<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        assert !proc.hasParent();<a name="line.539"></a>
-<span class="sourceLineNo">540</span>        ProcedureWALFormat.writeInsert(slot, proc);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>      // Push the transaction data and wait until it is persisted<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      pushData(PushType.INSERT, slot, proc.getProcId(), subProcIds);<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    } catch (IOException e) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      // We are not able to serialize the procedure.<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      // this is a code error, and we are not able to go on.<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: proc=" +<a name="line.548"></a>
-<span class="sourceLineNo">549</span>          proc + ", subprocs=" + Arrays.toString(subprocs), e);<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      throw new RuntimeException(e);<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    } finally {<a name="line.551"></a>
-<span class="sourceLineNo">552</span>      releaseSlot(slot);<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>  @Override<a name="line.556"></a>
-<span class="sourceLineNo">557</span>  public void insert(Procedure&lt;?&gt;[] procs) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    if (LOG.isTraceEnabled()) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      LOG.trace("Insert " + Arrays.toString(procs));<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
-<span class="sourceLineNo">561</span><a name="line.561"></a>
-<span class="sourceLineNo">562</span>    ByteSlot slot = acquireSlot();<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    try {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      // Serialize the insert<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      long[] procIds = new long[procs.length];<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>        assert !procs[i].hasParent();<a name="line.567"></a>
-<span class="sourceLineNo">568</span>        procIds[i] = procs[i].getProcId();<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        ProcedureWALFormat.writeInsert(slot, procs[i]);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>      // Push the transaction data and wait until it is persisted<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      pushData(PushType.INSERT, slot, Procedure.NO_PROC_ID, procIds);<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    } catch (IOException e) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      // We are not able to serialize the procedure.<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      // this is a code error, and we are not able to go on.<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: " +<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          Arrays.toString(procs), e);<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      throw new RuntimeException(e);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    } finally {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      releaseSlot(slot);<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    }<a name="line.582"></a>
-<span class="sourceLineNo">583</span>  }<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>  @Override<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  public void update(Procedure&lt;?&gt; proc) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    if (LOG.isTraceEnabled()) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>      LOG.trace("Update " + proc);<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    }<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span>    ByteSlot slot = acquireSlot();<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    try {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      // Serialize the update<a name="line.593"></a>
-<span class="sourceLineNo">594</span>      ProcedureWALFormat.writeUpdate(slot, proc);<a name="line.594"></a>
-<span class="sourceLineNo">595</span><a name="line.595"></a>
-<span class="sourceLineNo">596</span>      // Push the transaction data and wait until it is persisted<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      pushData(PushType.UPDATE, slot, proc.getProcId(), null);<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    } catch (IOException e) {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      // We are not able to serialize the procedure.<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      // this is a code error, and we are not able to go on.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      throw new RuntimeException(e);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    } finally {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      releaseSlot(slot);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>  }<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span>  @Override<a name="line.608"></a>
-<span class="sourceLineNo">609</span>  public void delete(long procId) {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    LOG.trace("Delete {}", procId);<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    ByteSlot slot = acquireSlot();<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    try {<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      // Serialize the delete<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      ProcedureWALFormat.writeDelete(slot, procId);<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>      // Push the transaction data and wait until it is persisted<a name="line.616"></a>
-<span class="sourceLineNo">617</span>      pushData(PushType.DELETE, slot, procId, null);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    } catch (IOException e) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      // We are not able to serialize the procedure.<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      // this is a code error, and we are not able to go on.<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + procId, e);<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      throw new RuntimeException(e);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    } finally {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>      releaseSlot(slot);<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    }<a name="line.625"></a>
-<span class="sourceLineNo">626</span>  }<a name="line.626"></a>
-<span class="sourceLineNo">627</span><a name="line.627"></a>
-<span class="sourceLineNo">628</span>  @Override<a name="line.628"></a>
-<span class="sourceLineNo">629</span>  public void delete(Procedure&lt;?&gt; proc, long[] subProcIds) {<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    assert proc != null : "expected a non-null procedure";<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    assert subProcIds != null &amp;&amp; subProcIds.length &gt; 0 : "expected subProcIds";<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    if (LOG.isTraceEnabled()) {<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      LOG.trace("Update " + proc + " and Delete " + Arrays.toString(subProcIds));<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    }<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>    ByteSlot slot = acquireSlot();<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    try {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      // Serialize the delete<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      ProcedureWALFormat.writeDelete(slot, proc, subProcIds);<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span>      // Push the transaction data and wait until it is persisted<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      pushData(PushType.DELETE, slot, proc.getProcId(), subProcIds);<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    } catch (IOException e) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      // We are not able to serialize the procedure.<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      // this is a code error, and we are not able to go on.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      throw new RuntimeException(e);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    } finally {<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      releaseSlot(slot);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    }<a name="line.650"></a>
-<span class="sourceLineNo">651</span>  }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>  @Override<a name="line.653"></a>
-<span class="sourceLineNo">654</span>  public void delete(final long[] procIds, final int offset, final int count) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    if (count == 0) return;<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    if (offset == 0 &amp;&amp; count == procIds.length) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      delete(procIds);<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    } else if (count == 1) {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>      delete(procIds[offset]);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    } else {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      delete(Arrays.copyOfRange(procIds, offset, offset + count));<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    }<a name="line.662"></a>
-<span class="sourceLineNo">663</span>  }<a name="line.663"></a>
-<span class="sourceLineNo">664</span><a name="line.664"></a>
-<span class="sourceLineNo">665</span>  private void delete(long[] procIds) {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    if (LOG.isTraceEnabled()) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      LOG.trace("Delete " + Arrays.toString(procIds));<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>    final ByteSlot slot = acquireSlot();<a name="line.670"></a>
-<span class="sourceLineNo">671</span>    try {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>      // Serialize the delete<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.673"></a>
-<span class="sourceLineNo">674</span>        ProcedureWALFormat.writeDelete(slot, procIds[i]);<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      }<a name="line.675"></a>
-<span class="sourceLineNo">676</span><a name="line.676"></a>
-<span class="sourceLineNo">677</span>      // Push the transaction data and wait until it is persisted<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      pushData(PushType.DELETE, slot, Procedure.NO_PROC_ID, procIds);<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    } catch (IOException e) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      // We are not able to serialize the procedure.<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      // this is a code error, and we are not able to go on.<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      LOG.error("Unable to serialize the procedures: " + Arrays.toString(procIds), e);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      throw new RuntimeException(e);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    } finally {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      releaseSlot(slot);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    }<a name="line.686"></a>
-<span class="sourceLineNo">687</span>  }<a name="line.687"></a>
-<span class="sourceLineNo">688</span><a name="line.688"></a>
-<span class="sourceLineNo">689</span>  private ByteSlot acquireSlot() {<a name="line.689"></a>
-<span class="sourceLineNo">690</span>    ByteSlot slot = slotsCache.poll();<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    return slot != null ? slot : new ByteSlot();<a name="line.691"></a>
-<span class="sourceLineNo">692</span>  }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>  private void releaseSlot(final ByteSlot slot) {<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    slot.reset();<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    slotsCache.offer(slot);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>  }<a name="line.697"></a>
-<span class="sourceLineNo">698</span><a name="line.698"></a>
-<span class="sourceLineNo">699</span>  private enum PushType { INSERT, UPDATE, DELETE }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span>  private long pushData(final PushType type, final ByteSlot slot,<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      final long procId, final long[] subProcIds) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    if (!isRunning()) {<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      throw new RuntimeException("the store must be running before inserting data");<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    }<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    if (logs.isEmpty()) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      throw new RuntimeException("recoverLease() must be called before inserting data");<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    }<a name="line.708"></a>
-<span class="sourceLineNo">709</span><a name="line.709"></a>
-<span class="sourceLineNo">710</span>    long logId = -1;<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    lock.lock();<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    try {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>      // Wait for the sync to be completed<a name="line.713"></a>
-<span class="sourceLineNo">714</span>      while (true) {<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        if (!isRunning()) {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>          throw new RuntimeException("store no longer running");<a name="line.716"></a>
-<span class="sourceLineNo">717</span>        } else if (isSyncAborted()) {<a name="line.717"></a>
-<span class="sourceLineNo">718</span>          throw new RuntimeException("sync aborted", syncException.get());<a name="line.718"></a>
-<span class="sourceLineNo">719</span>        } else if (inSync.get()) {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>          syncCond.await();<a name="line.720"></a>
-<span class="sourceLineNo">721</span>        } else if (slotIndex &gt;= syncMaxSlot) {<a name="line.721"></a>
-<span class="sourceLineNo">722</span>          slotCond.signal();<a name="line.722"></a>
-<span class="sourceLineNo">723</span>          syncCond.await();<a name="line.723"></a>
-<span class="sourceLineNo">724</span>        } else {<a name="line.724"></a>
-<span class="sourceLineNo">725</span>          break;<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        }<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>      final long pushSyncId = syncId.get();<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      updateStoreTracker(type, procId, subProcIds);<a name="line.730"></a>
-<span class="sourceLineNo">731</span>      slots[slotIndex++] = slot;<a name="line.731"></a>
-<span class="sourceLineNo">732</span>      logId = flushLogId;<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>      // Notify that there is new data<a name="line.734"></a>
-<span class="sourceLineNo">735</span>      if (slotIndex == 1) {<a name="line.735"></a>
-<span class="sourceLineNo">736</span>        waitCond.signal();<a name="line.736"></a>
-<span class="sourceLineNo">737</span>      }<a name="line.737"></a>
-<span class="sourceLineNo">738</span><a name="line.738"></a>
-<span class="sourceLineNo">739</span>      // Notify that the slots are full<a name="line.739"></a>
-<span class="sourceLineNo">740</span>      if (slotIndex == syncMaxSlot) {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>        waitCond.signal();<a name="line.741"></a>
-<span class="sourceLineNo">742</span>        slotCond.signal();<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span>      while (pushSyncId == syncId.get() &amp;&amp; isRunning()) {<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        syncCond.await();<a name="line.746"></a>
-<span class="sourceLineNo">747</span>      }<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    } catch (InterruptedException e) {<a name="line.748"></a>
-<span class="sourceLineNo">749</span>      Thread.currentThread().interrupt();<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      sendAbortProcessSignal();<a name="line.750"></a>
-<span class="sourceLineNo">751</span>      throw new RuntimeException(e);<a name="line.751"></a>
-<span class="sourceLineNo">752</span>    } finally {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>      lock.unlock();<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      if (isSyncAborted()) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>        throw new RuntimeException("sync aborted", syncException.get());<a name="line.755"></a>
-<span class="sourceLineNo">756</span>      }<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    }<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    return logId;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>  }<a name="line.759"></a>
-<span class="sourceLineNo">760</span><a name="line.760"></a>
-<span class="sourceLineNo">761</span>  private void updateStoreTracker(final PushType type,<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      final long procId, final long[] subProcIds) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    switch (type) {<a name="line.763"></a>
-<span class="sourceLineNo">764</span>      case INSERT:<a name="line.764"></a>
-<span class="sourceLineNo">765</span>        if (subProcIds == null) {<a name="line.765"></a>
-<span class="sourceLineNo">766</span>          storeTracker.insert(procId);<a name="line.766"></a>
-<span class="sourceLineNo">767</span>        } else if (procId == Procedure.NO_PROC_ID) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>          storeTracker.insert(subProcIds);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>        } else {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>          storeTracker.insert(procId, subProcIds);<a name="line.770"></a>
-<span class="sourceLineNo">771</span>          holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.771"></a>
-<span class="sourceLineNo">772</span>        }<a name="line.772"></a>
-<span class="sourceLineNo">773</span>        break;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>      case UPDATE:<a name="line.774"></a>
-<span class="sourceLineNo">775</span>        storeTracker.update(procId);<a name="line.775"></a>
-<span class="sourceLineNo">776</span>        holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>        break;<a name="line.777"></a>
-<span class="sourceLineNo">778</span>      case DELETE:<a name="line.778"></a>
-<span class="sourceLineNo">779</span>        if (subProcIds != null &amp;&amp; subProcIds.length &gt; 0) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>          storeTracker.delete(subProcIds);<a name="line.780"></a>
-<span class="sourceLineNo">781</span>          holdingCleanupTracker.setDeletedIfModified(subProcIds);<a name="line.781"></a>
-<span class="sourceLineNo">782</span>        } else {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>          storeTracker.delete(procId);<a name="line.783"></a>
-<span class="sourceLineNo">784</span>          holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        }<a name="line.785"></a>
-<span class="sourceLineNo">786</span>        break;<a name="line.786"></a>
-<span class="sourceLineNo">787</span>      default:<a name="line.787"></a>
-<span class="sourceLineNo">788</span>        throw new RuntimeException("invalid push type " + type);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
-<span class="sourceLineNo">790</span>  }<a name="line.790"></a>
-<span class="sourceLineNo">791</span><a name="line.791"></a>
-<span class="sourceLineNo">792</span>  private boolean isSyncAborted() {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    return syncException.get() != null;<a name="line.793"></a>
-<span class="sourceLineNo">794</span>  }<a name="line.794"></a>
-<span class="sourceLineNo">795</span><a name="line.795"></a>
-<span class="sourceLineNo">796</span>  private void syncLoop() throws Throwable {<a name="line.796"></a>
-<span class="sourceLineNo">797</span>    long totalSyncedToStore = 0;<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    inSync.set(false);<a name="line.798"></a>
-<span class="sourceLineNo">799</span>    lock.lock();<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    try {<a name="line.800"></a>
-<span class="sourceLineNo">801</span>      while (isRunning()) {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>        try {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>          // Wait until new data is available<a name="line.803"></a>
-<span class="sourceLineNo">804</span>          if (slotIndex == 0) {<a name="line.804"></a>
-<span class="sourceLineNo">805</span>            if (!loading.get()) {<a name="line.805"></a>
-<span class="sourceLineNo">806</span>              periodicRoll();<a name="line.806"></a>
-<span class="sourceLineNo">807</span>            }<a name="line.807"></a>
-<span class="sourceLineNo">808</span><a name="line.808"></a>
-<span class="sourceLineNo">809</span>            if (LOG.isTraceEnabled()) {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>              float rollTsSec = getMillisFromLastRoll() / 1000.0f;<a name="line.810"></a>
-<span class="sourceLineNo">811</span>              LOG.trace(String.format("Waiting for data. flushed=%s (%s/sec)",<a name="line.811"></a>
-<span class="sourceLineNo">812</span>                        StringUtils.humanSize(totalSynced.get()),<a name="line.812"></a>
-<span class="sourceLineNo">813</span>                        StringUtils.humanSize(totalSynced.get() / rollTsSec)));<a name="line.813"></a>
-<span class="sourceLineNo">814</span>            }<a name="line.814"></a>
-<span class="sourceLineNo">815</span><a name="line.815"></a>
-<span class="sourceLineNo">816</span>            waitCond.await(getMillisToNextPeriodicRoll(), TimeUnit.MILLISECONDS);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>            if (slotIndex == 0) {<a name="line.817"></a>
-<span class="sourceLineNo">818</span>              // no data.. probably a stop() or a periodic roll<a name="line.818"></a>
-<span class="sourceLineNo">819</span>              continue;<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>          // Wait SYNC_WAIT_MSEC or the signal of "slots full" before flushing<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          syncMaxSlot = runningProcCount;<a name="line.823"></a>
-<span class="sourceLineNo">824</span>          assert syncMaxSlot &gt; 0 : "unexpected syncMaxSlot=" + syncMaxSlot;<a name="line.824"></a>
-<span class="sourceLineNo">825</span>          final long syncWaitSt = System.currentTimeMillis();<a name="line.825"></a>
-<span class="sourceLineNo">826</span>          if (slotIndex != syncMaxSlot) {<a name="line.826"></a>
-<span class="sourceLineNo">827</span>            slotCond.await(syncWaitMsec, TimeUnit.MILLISECONDS);<a name="line.827"></a>
-<span class="sourceLineNo">828</span>          }<a name="line.828"></a>
-<span class="sourceLineNo">829</span><a name="line.829"></a>
-<span class="sourceLineNo">830</span>          final long currentTs = System.currentTimeMillis();<a name="line.830"></a>
-<span class="sourceLineNo">831</span>          final long syncWaitMs = currentTs - syncWaitSt;<a name="line.831"></a>
-<span class="sourceLineNo">832</span>          final float rollSec = getMillisFromLastRoll() / 1000.0f;<a name="line.832"></a>
-<span class="sourceLineNo">833</span>          final float syncedPerSec = totalSyncedToStore / rollSec;<a name="line.833"></a>
-<span class="sourceLineNo">834</span>          if (LOG.isTraceEnabled() &amp;&amp; (syncWaitMs &gt; 10 || slotIndex &lt; syncMaxSlot)) {<a name="line.834"></a>
-<span class="sourceLineNo">835</span>            LOG.trace(String.format("Sync wait %s, slotIndex=%s , totalSynced=%s (%s/sec)",<a name="line.835"></a>
-<span class="sourceLineNo">836</span>                      StringUtils.humanTimeDiff(syncWaitMs), slotIndex,<a name="line.836"></a>
-<span class="sourceLineNo">837</span>                      StringUtils.humanSize(totalSyncedToStore),<a name="line.837"></a>
-<span class="sourceLineNo">838</span>                      StringUtils.humanSize(syncedPerSec)));<a name="line.838"></a>
-<span class="sourceLineNo">839</span>          }<a name="line.839"></a>
-<span class="sourceLineNo">840</span><a name="line.840"></a>
-<span class="sourceLineNo">841</span>          // update webui circular buffers (TODO: get rid of allocations)<a name="line.841"></a>
-<span class="sourceLineNo">842</span>          final SyncMetrics syncMetrics = new SyncMetrics();<a name="line.842"></a>
-<span class="sourceLineNo">843</span>          syncMetrics.timestamp = currentTs;<a name="line.843"></a>
-<span class="sourceLineNo">844</span>          syncMetrics.syncWaitMs = syncWaitMs;<a name="line.844"></a>
-<span class="sourceLineNo">845</span>          syncMetrics.syncedEntries = slotIndex;<a name="line.845"></a>
-<span class="sourceLineNo">846</span>          syncMetrics.totalSyncedBytes = totalSyncedToStore;<a name="line.846"></a>
-<span class="sourceLineNo">847</span>          syncMetrics.syncedPerSec = syncedPerSec;<a name="line.847"></a>
-<span class="sourceLineNo">848</span>          syncMetricsQueue.add(syncMetrics);<a name="line.848"></a>
-<span class="sourceLineNo">849</span><a name="line.849"></a>
-<span class="sourceLineNo">850</span>          // sync<a name="line.850"></a>
-<span class="sourceLineNo">851</span>          inSync.set(true);<a name="line.851"></a>
-<span class="sourceLineNo">852</span>          long slotSize = syncSlots();<a name="line.852"></a>
-<span class="sourceLineNo">853</span>          logs.getLast().addToSize(slotSize);<a name="line.853"></a>
-<span class="sourceLineNo">854</span>          totalSyncedToStore = totalSynced.addAndGet(slotSize);<a name="line.854"></a>
-<span class="sourceLineNo">855</span>          slotIndex = 0;<a name="line.855"></a>
-<span class="sourceLineNo">856</span>          inSync.set(false);<a name="line.856"></a>
-<span class="sourceLineNo">857</span>          syncId.incrementAndGet();<a name="line.857"></a>
-<span class="sourceLineNo">858</span>        } catch (InterruptedException e) {<a name="line.858"></a>
-<span class="sourceLineNo">859</span>          Thread.currentThread().interrupt();<a name="line.859"></a>
-<span class="sourceLineNo">860</span>          syncException.compareAndSet(null, e);<a name="line.860"></a>
-<span class="sourceLineNo">861</span>          sendAbortProcessSignal();<a name="line.861"></a>
-<span class="sourceLineNo">862</span>          throw e;<a name="line.862"></a>
-<span class="sourceLineNo">863</span>        } catch (Throwable t) {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>          syncException.compareAndSet(null, t);<a name="line.864"></a>
-<span class="sourceLineNo">865</span>          sendAbortProcessSignal();<a name="line.865"></a>
-<span class="sourceLineNo">866</span>          throw t;<a name="line.866"></a>
-<span class="sourceLineNo">867</span>        } finally {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>          syncCond.signalAll();<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        }<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      }<a name="line.870"></a>
-<span class="sourceLineNo">871</span>    } finally {<a name="line.871"></a>
-<span class="sourceLineNo">872</span>      lock.unlock();<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    }<a name="line.873"></a>
-<span class="sourceLineNo">874</span>  }<a name="line.874"></a>
-<span class="sourceLineNo">875</span><a name="line.875"></a>
-<span class="sourceLineNo">876</span>  public ArrayList&lt;SyncMetrics&gt; getSyncMetrics() {<a name="line.876"></a>
-<span class="sourceLineNo">877</span>    lock.lock();<a name="line.877"></a>
-<span class="sourceLineNo">878</span>    try {<a name="line.878"></a>
-<span class="sourceLineNo">879</span>      return new ArrayList&lt;&gt;(syncMetricsQueue);<a name="line.879"></a>
-<span class="sourceLineNo">880</span>    } finally {<a name="line.880"></a>
-<span class="sourceLineNo">881</span>      lock.unlock();<a name="line.881"></a>
-<span class="sourceLineNo">882</span>    }<a name="line.882"></a>
-<span class="sourceLineNo">883</span>  }<a name="line.883"></a>
-<span class="sourceLineNo">884</span><a name="line.884"></a>
-<span class="sourceLineNo">885</span>  private long syncSlots() throws Throwable {<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    int retry = 0;<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    int logRolled = 0;<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    long totalSynced = 0;<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    do {<a name="line.889"></a>
-<span class="sourceLineNo">890</span>      try {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>        totalSynced = syncSlots(stream, slots, 0, slotIndex);<a name="line.891"></a>
-<span class="sourceLineNo">892</span>        break;<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      } catch (Throwable e) {<a name="line.893"></a>
-<span class="sourceLineNo">894</span>        LOG.warn("unable to sync slots, retry=" + retry);<a name="line.894"></a>
-<span class="sourceLineNo">895</span>        if (++retry &gt;= maxRetriesBeforeRoll) {<a name="line.895"></a>
-<span class="sourceLineNo">896</span>          if (logRolled &gt;= maxSyncFailureRoll &amp;&amp; isRunning()) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>            LOG.error("Sync slots after log roll failed, abort.", e);<a name="line.897"></a>
-<span class="sourceLineNo">898</span>            throw e;<a name="line.898"></a>
-<span class="sourceLineNo">899</span>          }<a name="line.899"></a>
-<span class="sourceLineNo">900</span><a name="line.900"></a>
-<span class="sourceLineNo">901</span>          if (!rollWriterWithRetries()) {<a name="line.901"></a>
-<span class="sourceLineNo">902</span>            throw e;<a name="line.902"></a>
-<span class="sourceLineNo">903</span>          }<a name="line.903"></a>
-<span class="sourceLineNo">904</span><a name="line.904"></a>
-<span class="sourceLineNo">905</span>          logRolled++;<a name="line.905"></a>
-<span class="sourceLineNo">906</span>          retry = 0;<a name="line.906"></a>
-<span class="sourceLineNo">907</span>        }<a name="line.907"></a>
-<span class="sourceLineNo">908</span>      }<a name="line.908"></a>
-<span class="sourceLineNo">909</span>    } while (isRunning());<a name="line.909"></a>
-<span class="sourceLineNo">910</span>    return totalSynced;<a name="line.910"></a>
-<span class="sourceLineNo">911</span>  }<a name="line.911"></a>
-<span class="sourceLineNo">912</span><a name="line.912"></a>
-<span class="sourceLineNo">913</span>  protected long syncSlots(final FSDataOutputStream stream, final ByteSlot[] slots,<a name="line.913"></a>
-<span class="sourceLineNo">914</span>      final int offset, final int count) throws IOException {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>    long totalSynced = 0;<a name="line.915"></a>
-<span class="sourceLineNo">916</span>    for (int i = 0; i &lt; count; ++i) {<a name="line.916"></a>
-<span class="sourceLineNo">917</span>      final ByteSlot data = slots[offset + i];<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      data.writeTo(stream);<a name="line.918"></a>
-<span class="sourceLineNo">919</span>      totalSynced += data.size();<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    }<a name="line.920"></a>
-<span class="sourceLineNo">921</span><a name="line.921"></a>
-<span class="sourceLineNo">922</span>    syncStream(stream);<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    sendPostSyncSignal();<a name="line.923"></a>
-<span class="sourceLineNo">924</span><a name="line.924"></a>
-<span class="sourceLineNo">925</span>    if (LOG.isTraceEnabled()) {<a name="line.925"></a>
-<span class="sourceLineNo">926</span>      LOG.trace("Sync slots=" + count + '/' + syncMaxSlot +<a name="line.926"></a>
-<span class="sourceLineNo">927</span>                ", flushed=" + StringUtils.humanSize(totalSynced));<a name="line.927"></a>
-<span class="sourceLineNo">928</span>    }<a name="line.928"></a>
-<span class="sourceLineNo">929</span>    return totalSynced;<a name="line.929"></a>
-<span class="sourceLineNo">930</span>  }<a name="line.930"></a>
-<span class="sourceLineNo">931</span><a name="line.931"></a>
-<span class="sourceLineNo">932</span>  protected void syncStream(final FSDataOutputStream stream) throws IOException {<a name="line.932"></a>
-<span class="sourceLineNo">933</span>    if (useHsync) {<a name="line.933"></a>
-<span class="sourceLineNo">934</span>      stream.hsync();<a name="line.934"></a>
-<span class="sourceLineNo">935</span>    } else {<a name="line.935"></a>
-<span class="sourceLineNo">936</span>      stream.hflush();<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    }<a name="line.937"></a>
-<span class="sourceLineNo">938</span>  }<a name="line.938"></a>
-<span class="sourceLineNo">939</span><a name="line.939"></a>
-<span class="sourceLineNo">940</span>  private boolean rollWriterWithRetries() {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    for (int i = 0; i &lt; rollRetries &amp;&amp; isRunning(); ++i) {<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      if (i &gt; 0) Threads.sleepWithoutInterrupt(waitBeforeRoll * i);<a name="line.942"></a>
-<span class="sourceLineNo">943</span><a name="line.943"></a>
-<span class="sourceLineNo">944</span>      try {<a name="line.944"></a>
-<span class="sourceLineNo">945</span>        if (rollWriter()) {<a name="line.945"></a>
-<span class="sourceLineNo">946</span>          return true;<a name="line.946"></a>
-<span class="sourceLineNo">947</span>        }<a name="line.947"></a>
-<span class="sourceLineNo">948</span>      } catch (IOException e) {<a name="line.948"></a>
-<span class="sourceLineNo">949</span>        LOG.warn("Unable to roll the log, attempt=" + (i + 1), e);<a name="line.949"></a>
-<span class="sourceLineNo">950</span>      }<a name="line.950"></a>
-<span class="sourceLineNo">951</span>    }<a name="line.951"></a>
-<span class="sourceLineNo">952</span>    LOG.error(HBaseMarkers.FATAL, "Unable to roll the log");<a name="line.952"></a>
-<span class="sourceLineNo">953</span>    return false;<a name="line.953"></a>
-<span class="sourceLineNo">954</span>  }<a name="line.954"></a>
-<span class="sourceLineNo">955</span><a name="line.955"></a>
-<span class="sourceLineNo">956</span>  private boolean tryRollWriter() {<a name="line.956"></a>
-<span class="sourceLineNo">957</span>    try {<a name="line.957"></a>
-<span class="sourceLineNo">958</span>      return rollWriter();<a name="line.958"></a>
-<span class="sourceLineNo">959</span>    } catch (IOException e) {<a name="line.959"></a>
-<span class="sourceLineNo">960</span>      LOG.warn("Unable to roll the log", e);<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      return false;<a name="line.961"></a>
-<span class="sourceLineNo">962</span>    }<a name="line.962"></a>
-<span class="sourceLineNo">963</span>  }<a name="line.963"></a>
-<span class="sourceLineNo">964</span><a name="line.964"></a>
-<span class="sourceLineNo">965</span>  public long getMillisToNextPeriodicRoll() {<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    if (lastRollTs.get() &gt; 0 &amp;&amp; periodicRollMsec &gt; 0) {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>      return periodicRollMsec - getMillisFromLastRoll();<a name="line.967"></a>
-<span class="sourceLineNo">968</span>    }<a name="line.968"></a>
-<span class="sourceLineNo">969</span>    return Long.MAX_VALUE;<a name="line.969"></a>
-<span class="sourceLineNo">970</span>  }<a name="line.970"></a>
-<span class="sourceLineNo">971</span><a name="line.971"></a>
-<span class="sourceLineNo">972</span>  public long getMillisFromLastRoll() {<a name="line.972"></a>
-<span class="sourceLineNo">973</span>    return (System.currentTimeMillis() - lastRollTs.get());<a name="line.973"></a>
-<span class="sourceLineNo">974</span>  }<a name="line.974"></a>
-<span class="sourceLineNo">975</span><a name="line.975"></a>
-<span class="sourceLineNo">976</span>  @VisibleForTesting<a name="line.976"></a>
-<span class="sourceLineNo">977</span>  void periodicRollForTesting() throws IOException {<a name="line.977"></a>
-<span class="sourceLineNo">978</span>    lock.lock();<a name="line.978"></a>
-<span class="sourceLineNo">979</span>    try {<a name="line.979"></a>
-<span class="sourceLineNo">980</span>      periodicRoll();<a name="line.980"></a>
-<span class="sourceLineNo">981</span>    } finally {<a name="line.981"></a>
-<span class="sourceLineNo">982</span>      lock.unlock();<a name="line.982"></a>
-<span class="sourceLineNo">983</span>    }<a name="line.983"></a>
-<span class="sourceLineNo">984</span>  }<a name="line.984"></a>
-<span class="sourceLineNo">985</span><a name="line.985"></a>
-<span class="sourceLineNo">986</span>  @VisibleForTesting<a name="line.986"></a>
-<span class="sourceLineNo">987</span>  public boolean rollWriterForTesting() throws IOException {<a name="line.987"></a>
-<span class="sourceLineNo">988</span>    lock.lock();<a name="line.988"></a>
-<span class="sourceLineNo">989</span>    try {<a name="line.989"></a>
-<span class="sourceLineNo">990</span>      return rollWriter();<a name="line.990"></a>
-<span class="sourceLineNo">991</span>    } finally {<a name="line.991"></a>
-<span class="sourceLineNo">992</span>      lock.unlock();<a name="line.992"></a>
-<span class="sourceLineNo">993</span>    }<a name="line.993"></a>
-<span class="sourceLineNo">994</span>  }<a name="line.994"></a>
-<span class="sourceLineNo">995</span><a name="line.995"></a>
-<span class="sourceLineNo">996</span>  @VisibleForTesting<a name="line.996"></a>
-<span class="sourceLineNo">997</span>  void removeInactiveLogsForTesting() throws Exception {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>    lock.lock();<a name="line.998"></a>
-<span class="sourceLineNo">999</span>    try {<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>      removeInactiveLogs();<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>    } finally  {<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>      lock.unlock();<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>    }<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>  }<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span><a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>  private void periodicRoll() throws IOException {<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>    if (storeTracker.isEmpty()) {<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>      LOG.trace("no active procedures");<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>      tryRollWriter();<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>      removeAllLogs(flushLogId - 1, "no active procedures");<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>    } else {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      if (storeTracker.isAllModified()) {<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>        LOG.trace("all the active procedures are in the latest log");<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>        removeAllLogs(flushLogId - 1, "all the active procedures are in the latest log");<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>      }<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span><a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>      // if the log size has exceeded the roll threshold<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>      // or the periodic roll timeout is expired, try to roll the wal.<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>      if (totalSynced.get() &gt; rollThreshold || getMillisToNextPeriodicRoll() &lt;= 0) {<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>        tryRollWriter();<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>      }<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span><a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>      removeInactiveLogs();<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>    }<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>  }<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>  private boolean rollWriter() throws IOException {<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    if (!isRunning()) {<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>      return false;<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    }<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span><a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>    // Create new state-log<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>    if (!rollWriter(flushLogId + 1)) {<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      LOG.warn("someone else has already created log {}", flushLogId);<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>      return false;<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>    }<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span><a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>    // We have the lease on the log,<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>    // but we should check if someone else has created new files<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>    if (getMaxLogId(getLogFiles()) &gt; flushLogId) {<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>      LOG.warn("Someone else created new logs. Expected maxLogId &lt; {}", flushLogId);<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>      logs.getLast().removeFile(this.walArchiveDir);<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>      return false;<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    }<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span><a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    // We have the lease on the log<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>    return true;<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>  }<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span><a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>  @VisibleForTesting<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>  boolean rollWriter(long logId) throws IOException {<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    assert logId &gt; flushLogId : "logId=" + logId + " flushLogId=" + flushLogId;<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    assert lock.isHeldByCurrentThread() : "expected to be the lock owner. " + lock.isLocked();<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span><a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    ProcedureWALHeader header = ProcedureWALHeader.newBuilder()<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>      .setVersion(ProcedureWALFormat.HEADER_VERSION)<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>      .setType(ProcedureWALFormat.LOG_TYPE_STREAM)<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>      .setMinProcId(storeTracker.getActiveMinProcId())<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      .setLogId(logId)<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      .build();<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span><a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    FSDataOutputStream newStream = null;<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>    Path newLogFile = null;<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    long startPos = -1;<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    newLogFile = getLogFilePath(logId);<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    try {<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>      newStream = CommonFSUtils.createForWal(fs, newLogFile, false);<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    } catch (FileAlreadyExistsException e) {<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>      LOG.error("Log file with id={} already exists", logId, e);<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>      return false;<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    } catch (RemoteException re) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      LOG.warn("failed to create log file with id={}", logId, re);<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>      return false;<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    }<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    // After we create the stream but before we attempt to use it at all<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    // ensure that we can provide the level of data safety we're configured<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    // to provide.<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>    final String durability = useHsync ? "hsync" : "hflush";<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    if (enforceStreamCapability &amp;&amp; !(CommonFSUtils.hasCapability(newStream, durability))) {<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>        throw new IllegalStateException("The procedure WAL relies on the ability to " + durability +<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>          " for proper operation during component failures, but the underlying filesystem does " +<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>          "not support doing so. Please check the config value of '" + USE_HSYNC_CONF_KEY +<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>          "' to set the desired level of robustness and ensure the config value of '" +<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>          CommonFSUtils.HBASE_WAL_DIR + "' points to a FileSystem mount that can provide it.");<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>    }<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    try {<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>      ProcedureWALFormat.writeHeader(newStream, header);<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>      startPos = newStream.getPos();<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    } catch (IOException ioe) {<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>      LOG.warn("Encountered exception writing header", ioe);<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>      newStream.close();<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      return false;<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>    }<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span><a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    closeCurrentLogStream(false);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span><a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>    storeTracker.resetModified();<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>    stream = newStream;<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>    flushLogId = logId;<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>    totalSynced.set(0);<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    long rollTs = System.currentTimeMillis();<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    lastRollTs.set(rollTs);<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    logs.add(new ProcedureWALFile(fs, newLogFile, header, startPos, rollTs));<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span><a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    // if it's the first next WAL being added, build the holding cleanup tracker<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    if (logs.size() == 2) {<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>      buildHoldingCleanupTracker();<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    } else if (logs.size() &gt; walCountWarnThreshold) {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      LOG.warn("procedure WALs count={} above the warning threshold {}. check running procedures" +<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>        " to see if something is stuck.", logs.size(), walCountWarnThreshold);<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>      // This is just like what we have done at RS side when there are too many wal files. For RS,<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>      // if there are too many wal files, we will find out the wal entries in the oldest file, and<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>      // tell the upper layer to flush these regions so the wal entries will be useless and then we<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>      // can delete the wal file. For WALProcedureStore, the assumption is that, if all the<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>      // procedures recorded in a proc wal file are modified or deleted in a new proc wal file, then<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>      // we are safe to delete it. So here if there are too many proc wal files, we will find out<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>      // the procedure ids in the oldest file, which are neither modified nor deleted in newer proc<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>      // wal files, and tell upper layer to update the state of these procedures to the newest proc<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>      // wal file(by calling ProcedureStore.update), then we are safe to delete the oldest proc wal<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>      // file.<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>      sendForceUpdateSignal(holdingCleanupTracker.getAllActiveProcIds());<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>    }<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span><a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>    LOG.info("Rolled new Procedure Store WAL, id={}", logId);<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    return true;<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>  }<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span><a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>  private void closeCurrentLogStream(boolean abort) {<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    if (stream == null || logs.isEmpty()) {<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>      return;<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>    try {<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>      ProcedureWALFile log = logs.getLast();<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>      log.setProcIds(storeTracker.getModifiedMinProcId(), storeTracker.getModifiedMaxProcId());<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>      log.updateLocalTracker(storeTracker);<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>      if (!abort) {<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>        long trailerSize = ProcedureWALFormat.writeTrailer(stream, storeTracker);<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>        log.addToSize(trailerSize);<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>      }<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>    } catch (IOException e) {<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>      LOG.warn("Unable to write the trailer", e);<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    }<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>    try {<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>      stream.close();<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    } catch (IOException e) {<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>      LOG.error("Unable to close the stream", e);<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>    }<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    stream = null;<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>  }<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span><a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>  // ==========================================================================<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>  //  Log Files cleaner helpers<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>  // ==========================================================================<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>  private void removeInactiveLogs() throws IOException {<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>    // We keep track of which procedures are holding the oldest WAL in 'holdingCleanupTracker'.<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    // once there is nothing olding the oldest WAL we can remove it.<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>    while (logs.size() &gt; 1 &amp;&amp; holdingCleanupTracker.isEmpty()) {<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>      LOG.info("Remove the oldest log {}", logs.getFirst());<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      removeLogFile(logs.getFirst(), walArchiveDir);<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>      buildHoldingCleanupTracker();<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>    }<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span><a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>    // TODO: In case we are holding up a lot of logs for long time we should<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    // rewrite old procedures (in theory parent procs) to the new WAL.<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>  }<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span><a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>  private void buildHoldingCleanupTracker() {<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    if (logs.size() &lt;= 1) {<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>      // we only have one wal, so nothing to do<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>      holdingCleanupTracker.reset();<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>      return;<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    }<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span><a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    // compute the holding tracker.<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>    // - the first WAL is used for the 'updates'<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    // - the global tracker will be used to determine whether a procedure has been deleted<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>    // - other trackers will be used to determine whether a procedure has been updated, as a deleted<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    // procedure can always be detected by checking the global tracker, we can save the deleted<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>    // checks when applying other trackers<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>    holdingCleanupTracker.resetTo(logs.getFirst().getTracker(), true);<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>    holdingCleanupTracker.setDeletedIfDeletedByThem(storeTracker);<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>    // the logs is a linked list, so avoid calling get(index) on it.<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>    Iterator&lt;ProcedureWALFile&gt; iter = logs.iterator();<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    // skip the tracker for the first file when creating the iterator.<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    iter.next();<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>    ProcedureStoreTracker tracker = iter.next().getTracker();<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>    // testing iter.hasNext after calling iter.next to skip applying the tracker for last file,<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>    // which is just the storeTracker above.<a 

<TRUNCATED>

[21/26] hbase-site git commit: Published site at 64c4861272aa03f714b4029ae7725f4286b77062.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
index 060f6b0..06012d7 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -508,169 +508,173 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#getProcedureScheduler--">getProcedureScheduler</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i27" class="rowColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/util/IdLock.html" title="class in org.apache.hadoop.hbase.util">IdLock</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#getProcExecutionLock--">getProcExecutionLock</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i28" class="altColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#getProcStack-long-">getProcStack</a></span>(long&nbsp;rootProcId)</code>&nbsp;</td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code><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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#getResult-long-">getResult</a></span>(long&nbsp;procId)</code>&nbsp;</td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code><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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#getResultOrProcedure-long-">getResultOrProcedure</a></span>(long&nbsp;procId)</code>&nbsp;</td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code>(package private) <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#getRootProcedureId-org.apache.hadoop.hbase.procedure2.Procedure-">getRootProcedureId</a></span>(<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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;proc)</code>&nbsp;</td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureScheduler.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureScheduler</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#getScheduler--">getScheduler</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#getStore--">getStore</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#getWorkerThreadCount--">getWorkerThreadCount</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#handleInterruptedException-org.apache.hadoop.hbase.procedure2.Procedure-java.lang.InterruptedException-">handleInterruptedException</a></span>(<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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;proc,
                           <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>&nbsp;e)</code>&nbsp;</td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#init-int-boolean-">init</a></span>(int&nbsp;numThreads,
     boolean&nbsp;abortOnCorruption)</code>
 <div class="block">Initialize the procedure executor, but do not start workers.</div>
 </td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code>private <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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#initializeChildren-org.apache.hadoop.hbase.procedure2.RootProcedureState-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">initializeChildren</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;procStack,
                   <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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;procedure,
                   <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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;[]&nbsp;subprocs)</code>&nbsp;</td>
 </tr>
-<tr id="i37" class="rowColor">
+<tr id="i38" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#isFinished-long-">isFinished</a></span>(long&nbsp;procId)</code>
 <div class="block">Return true if the procedure is finished.</div>
 </td>
 </tr>
-<tr id="i38" class="altColor">
+<tr id="i39" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#isProcedureOwner-long-org.apache.hadoop.hbase.security.User-">isProcedureOwner</a></span>(long&nbsp;procId,
                 <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</code>
 <div class="block">Check if the user is this procedure's owner</div>
 </td>
 </tr>
-<tr id="i39" class="rowColor">
+<tr id="i40" class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#isRootFinished-org.apache.hadoop.hbase.procedure2.Procedure-">isRootFinished</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc)</code>&nbsp;</td>
 </tr>
-<tr id="i40" class="altColor">
+<tr id="i41" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#isRunning--">isRunning</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i41" class="rowColor">
+<tr id="i42" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#isStarted-long-">isStarted</a></span>(long&nbsp;procId)</code>
 <div class="block">Return true if the procedure is started.</div>
 </td>
 </tr>
-<tr id="i42" class="altColor">
+<tr id="i43" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#join--">join</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i43" class="rowColor">
+<tr id="i44" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#kill-java.lang.String-">kill</a></span>(<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;msg)</code>&nbsp;</td>
 </tr>
-<tr id="i44" class="altColor">
+<tr id="i45" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#load-boolean-">load</a></span>(boolean&nbsp;abortOnCorruption)</code>&nbsp;</td>
 </tr>
-<tr id="i45" class="rowColor">
+<tr id="i46" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#loadProcedures-org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureIterator-boolean-">loadProcedures</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a>&nbsp;procIter,
               boolean&nbsp;abortOnCorruption)</code>&nbsp;</td>
 </tr>
-<tr id="i46" class="altColor">
+<tr id="i47" class="rowColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#nextProcId--">nextProcId</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i47" class="rowColor">
+<tr id="i48" class="altColor">
 <td class="colFirst"><code>private <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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#prepareProcedure-org.apache.hadoop.hbase.procedure2.Procedure-">prepareProcedure</a></span>(<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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;proc)</code>&nbsp;</td>
 </tr>
-<tr id="i48" class="altColor">
+<tr id="i49" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#procedureFinished-org.apache.hadoop.hbase.procedure2.Procedure-">procedureFinished</a></span>(<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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;proc)</code>&nbsp;</td>
 </tr>
-<tr id="i49" class="rowColor">
+<tr id="i50" class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#pushProcedure-org.apache.hadoop.hbase.procedure2.Procedure-">pushProcedure</a></span>(<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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;proc)</code>&nbsp;</td>
 </tr>
-<tr id="i50" class="altColor">
+<tr id="i51" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#refreshConfiguration-org.apache.hadoop.conf.Configuration-">refreshConfiguration</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
 </tr>
-<tr id="i51" class="rowColor">
+<tr id="i52" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#registerListener-org.apache.hadoop.hbase.procedure2.ProcedureExecutor.ProcedureExecutorListener-">registerListener</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.ProcedureExecutorListener</a>&nbsp;listener)</code>&nbsp;</td>
 </tr>
-<tr id="i52" class="altColor">
+<tr id="i53" class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#registerNonce-org.apache.hadoop.hbase.util.NonceKey-">registerNonce</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;nonceKey)</code>
 <div class="block">Register a nonce for a procedure that is going to be submitted.</div>
 </td>
 </tr>
-<tr id="i53" class="rowColor">
+<tr id="i54" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#releaseLock-org.apache.hadoop.hbase.procedure2.Procedure-boolean-">releaseLock</a></span>(<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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;proc,
            boolean&nbsp;force)</code>&nbsp;</td>
 </tr>
-<tr id="i54" class="altColor">
+<tr id="i55" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#removeChore-org.apache.hadoop.hbase.procedure2.ProcedureInMemoryChore-">removeChore</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureInMemoryChore.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureInMemoryChore</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;chore)</code>
 <div class="block">Remove a chore procedure from the executor</div>
 </td>
 </tr>
-<tr id="i55" class="rowColor">
+<tr id="i56" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#removeResult-long-">removeResult</a></span>(long&nbsp;procId)</code>
 <div class="block">Mark the specified completed procedure, as ready to remove.</div>
 </td>
 </tr>
-<tr id="i56" class="altColor">
+<tr id="i57" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#restoreLock-org.apache.hadoop.hbase.procedure2.Procedure-java.util.Set-">restoreLock</a></span>(<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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;proc,
            <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;restored)</code>&nbsp;</td>
 </tr>
-<tr id="i57" class="rowColor">
+<tr id="i58" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#restoreLocks--">restoreLocks</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i58" class="altColor">
+<tr id="i59" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#restoreLocks-java.util.Deque-java.util.Set-">restoreLocks</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&gt;&nbsp;stack,
             <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;restored)</code>&nbsp;</td>
 </tr>
-<tr id="i59" class="rowColor">
+<tr id="i60" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#sendProcedureAddedNotification-long-">sendProcedureAddedNotification</a></span>(long&nbsp;procId)</code>&nbsp;</td>
 </tr>
-<tr id="i60" class="altColor">
+<tr id="i61" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#sendProcedureFinishedNotification-long-">sendProcedureFinishedNotification</a></span>(long&nbsp;procId)</code>&nbsp;</td>
 </tr>
-<tr id="i61" class="rowColor">
+<tr id="i62" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#sendProcedureLoadedNotification-long-">sendProcedureLoadedNotification</a></span>(long&nbsp;procId)</code>&nbsp;</td>
 </tr>
-<tr id="i62" class="altColor">
+<tr id="i63" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#setFailureResultForNonce-org.apache.hadoop.hbase.util.NonceKey-java.lang.String-org.apache.hadoop.hbase.security.User-java.io.IOException-">setFailureResultForNonce</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;nonceKey,
                         <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;procName,
@@ -680,61 +684,61 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  same error to the requests with the same nonceKey.</div>
 </td>
 </tr>
-<tr id="i63" class="rowColor">
+<tr id="i64" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#setKeepAliveTime-long-java.util.concurrent.TimeUnit-">setKeepAliveTime</a></span>(long&nbsp;keepAliveTime,
                 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;timeUnit)</code>&nbsp;</td>
 </tr>
-<tr id="i64" class="altColor">
+<tr id="i65" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#startWorkers--">startWorkers</a></span>()</code>
 <div class="block">Start the workers.</div>
 </td>
 </tr>
-<tr id="i65" class="rowColor">
+<tr id="i66" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#stop--">stop</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i66" class="altColor">
+<tr id="i67" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#submitChildrenProcedures-org.apache.hadoop.hbase.procedure2.Procedure:A-">submitChildrenProcedures</a></span>(<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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;[]&nbsp;subprocs)</code>&nbsp;</td>
 </tr>
-<tr id="i67" class="rowColor">
+<tr id="i68" class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#submitProcedure-org.apache.hadoop.hbase.procedure2.Procedure-">submitProcedure</a></span>(<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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;proc)</code>
 <div class="block">Add a new root-procedure to the executor.</div>
 </td>
 </tr>
-<tr id="i68" class="altColor">
+<tr id="i69" class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#submitProcedure-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.util.NonceKey-">submitProcedure</a></span>(<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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;proc,
                <a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;nonceKey)</code>
 <div class="block">Add a new root-procedure to the executor.</div>
 </td>
 </tr>
-<tr id="i69" class="rowColor">
+<tr id="i70" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#submitProcedures-org.apache.hadoop.hbase.procedure2.Procedure:A-">submitProcedures</a></span>(<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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;[]&nbsp;procs)</code>
 <div class="block">Add a set of new root-procedure to the executor.</div>
 </td>
 </tr>
-<tr id="i70" class="altColor">
+<tr id="i71" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#unregisterListener-org.apache.hadoop.hbase.procedure2.ProcedureExecutor.ProcedureExecutorListener-">unregisterListener</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.ProcedureExecutorListener</a>&nbsp;listener)</code>&nbsp;</td>
 </tr>
-<tr id="i71" class="rowColor">
+<tr id="i72" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#unregisterNonceIfProcedureWasNotSubmitted-org.apache.hadoop.hbase.util.NonceKey-">unregisterNonceIfProcedureWasNotSubmitted</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;nonceKey)</code>
 <div class="block">Remove the NonceKey if the procedure was not submitted to the executor.</div>
 </td>
 </tr>
-<tr id="i72" class="altColor">
+<tr id="i73" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#updateStoreOnExec-org.apache.hadoop.hbase.procedure2.RootProcedureState-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">updateStoreOnExec</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;procStack,
                  <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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;procedure,
                  <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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;[]&nbsp;subprocs)</code>&nbsp;</td>
 </tr>
-<tr id="i73" class="rowColor">
+<tr id="i74" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#yieldProcedure-org.apache.hadoop.hbase.procedure2.Procedure-">yieldProcedure</a></span>(<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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;proc)</code>&nbsp;</td>
 </tr>
@@ -2075,12 +2079,21 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <a name="getCompletedSize--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>getCompletedSize</h4>
 <pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1914">getCompletedSize</a>()</pre>
 </li>
 </ul>
+<a name="getProcExecutionLock--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getProcExecutionLock</h4>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/IdLock.html" title="class in org.apache.hadoop.hbase.util">IdLock</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1919">getProcExecutionLock</a>()</pre>
+</li>
+</ul>
 </li>
 </ul>
 </li>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b9b09fec/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html
index 99d7a62..3fd4750 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static enum <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.699">WALProcedureStore.PushType</a>
+<pre>private static enum <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.700">WALProcedureStore.PushType</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a>&gt;</pre>
 </li>
 </ul>
@@ -213,7 +213,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>INSERT</h4>
-<pre>public static final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html#line.699">INSERT</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html#line.700">INSERT</a></pre>
 </li>
 </ul>
 <a name="UPDATE">
@@ -222,7 +222,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>UPDATE</h4>
-<pre>public static final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html#line.699">UPDATE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html#line.700">UPDATE</a></pre>
 </li>
 </ul>
 <a name="DELETE">
@@ -231,7 +231,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DELETE</h4>
-<pre>public static final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html#line.699">DELETE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html#line.700">DELETE</a></pre>
 </li>
 </ul>
 </li>
@@ -248,7 +248,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>values</h4>
-<pre>public static&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a>[]&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html#line.699">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a>[]&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html#line.700">values</a>()</pre>
 <div class="block">Returns an array containing the constants of this enum type, in
 the order they are declared.  This method may be used to iterate
 over the constants as follows:
@@ -268,7 +268,7 @@ for (WALProcedureStore.PushType c : WALProcedureStore.PushType.values())
 <ul class="blockListLast">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html#line.699">valueOf</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;name)</pre>
+<pre>public static&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html#line.700">valueOf</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;name)</pre>
 <div class="block">Returns the enum constant of this type with the specified name.
 The string must match <i>exactly</i> an identifier used to declare an
 enum constant in this type.  (Extraneous whitespace characters are