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

[01/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site e4594033d -> 0f0847e08


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMaster.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMaster.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMaster.html
index d5e0461..6b42035 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMaster.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMaster.html
@@ -28,257 +28,250 @@
 <span class="sourceLineNo">020</span>import static org.junit.Assert.assertArrayEquals;<a name="line.20"></a>
 <span class="sourceLineNo">021</span>import static org.junit.Assert.assertEquals;<a name="line.21"></a>
 <span class="sourceLineNo">022</span>import static org.junit.Assert.assertFalse;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.junit.Assert.assertNull;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.junit.Assert.assertTrue;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import static org.junit.Assert.fail;<a name="line.25"></a>
-<span class="sourceLineNo">026</span><a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.io.IOException;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.List;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Map;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.conf.Configuration;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.fs.FileSystem;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.fs.Path;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.HConstants;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.MiniHBaseCluster;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.ServerName;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.TableName;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.Table;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.HBaseFsck;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.util.StringUtils;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.junit.AfterClass;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.junit.BeforeClass;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.junit.ClassRule;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.Rule;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.Test;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.experimental.categories.Category;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.rules.TestName;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.slf4j.Logger;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.slf4j.LoggerFactory;<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>@Category({MasterTests.class, MediumTests.class})<a name="line.68"></a>
-<span class="sourceLineNo">069</span>public class TestMaster {<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>  @ClassRule<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.72"></a>
-<span class="sourceLineNo">073</span>      HBaseClassTestRule.forClass(TestMaster.class);<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private static final Logger LOG = LoggerFactory.getLogger(TestMaster.class);<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private static final TableName TABLENAME = TableName.valueOf("TestMaster");<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  private static final byte[] FAMILYNAME = Bytes.toBytes("fam");<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  private static Admin admin;<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  @Rule<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  public TestName name = new TestName();<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  @BeforeClass<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  public static void beforeAllTests() throws Exception {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    // we will retry operations when PleaseHoldException is thrown<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    TEST_UTIL.getConfiguration().setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER, 3);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    // Start a cluster of two regionservers.<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    TEST_UTIL.startMiniCluster(2);<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    admin = TEST_UTIL.getAdmin();<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>  @AfterClass<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  public static void afterAllTests() throws Exception {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  }<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>  @Test<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  @SuppressWarnings("deprecation")<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  public void testMasterOpsWhileSplitting() throws Exception {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    HMaster m = cluster.getMaster();<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>    try (Table ht = TEST_UTIL.createTable(TABLENAME, FAMILYNAME)) {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      assertTrue(m.getTableStateManager().isTableState(TABLENAME, TableState.State.ENABLED));<a name="line.105"></a>
-<span class="sourceLineNo">106</span>      TEST_UTIL.loadTable(ht, FAMILYNAME, false);<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>    List&lt;Pair&lt;RegionInfo, ServerName&gt;&gt; tableRegions = MetaTableAccessor.getTableRegionsAndLocations(<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        m.getConnection(), TABLENAME);<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    LOG.info("Regions after load: " + Joiner.on(',').join(tableRegions));<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    assertEquals(1, tableRegions.size());<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    assertArrayEquals(HConstants.EMPTY_START_ROW,<a name="line.113"></a>
-<span class="sourceLineNo">114</span>        tableRegions.get(0).getFirst().getStartKey());<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    assertArrayEquals(HConstants.EMPTY_END_ROW,<a name="line.115"></a>
-<span class="sourceLineNo">116</span>        tableRegions.get(0).getFirst().getEndKey());<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>    // Now trigger a split and stop when the split is in progress<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    LOG.info("Splitting table");<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    TEST_UTIL.getAdmin().split(TABLENAME);<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>    LOG.info("Making sure we can call getTableRegions while opening");<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    while (tableRegions.size() &lt; 3) {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      tableRegions = MetaTableAccessor.getTableRegionsAndLocations(m.getConnection(),<a name="line.124"></a>
-<span class="sourceLineNo">125</span>          TABLENAME, false);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      Thread.sleep(100);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    }<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    LOG.info("Regions: " + Joiner.on(',').join(tableRegions));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    // We have three regions because one is split-in-progress<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    assertEquals(3, tableRegions.size());<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    LOG.info("Making sure we can call getTableRegionClosest while opening");<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    Pair&lt;RegionInfo, ServerName&gt; pair =<a name="line.132"></a>
-<span class="sourceLineNo">133</span>        m.getTableRegionForRow(TABLENAME, Bytes.toBytes("cde"));<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    LOG.info("Result is: " + pair);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    Pair&lt;RegionInfo, ServerName&gt; tableRegionFromName =<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        MetaTableAccessor.getRegion(m.getConnection(),<a name="line.136"></a>
-<span class="sourceLineNo">137</span>          pair.getFirst().getRegionName());<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    assertTrue(RegionInfo.COMPARATOR.compare(tableRegionFromName.getFirst(), pair.getFirst()) == 0);<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  @Test<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  public void testMoveRegionWhenNotInitialized() {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    HMaster m = cluster.getMaster();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    try {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      m.setInitialized(false); // fake it, set back later<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      RegionInfo meta = RegionInfoBuilder.FIRST_META_REGIONINFO;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      m.move(meta.getEncodedNameAsBytes(), null);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      fail("Region should not be moved since master is not initialized");<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    } catch (IOException ioe) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      assertTrue(ioe instanceof PleaseHoldException);<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    } finally {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      m.setInitialized(true);<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><a name="line.156"></a>
-<span class="sourceLineNo">157</span>  @Test<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  public void testMoveThrowsUnknownRegionException() throws IOException {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    HTableDescriptor htd = new HTableDescriptor(tableName);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    HColumnDescriptor hcd = new HColumnDescriptor("value");<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    htd.addFamily(hcd);<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span>    admin.createTable(htd, null);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    try {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      RegionInfo hri = RegionInfoBuilder.newBuilder(tableName)<a name="line.166"></a>
-<span class="sourceLineNo">167</span>          .setStartKey(Bytes.toBytes("A"))<a name="line.167"></a>
-<span class="sourceLineNo">168</span>          .setEndKey(Bytes.toBytes("Z"))<a name="line.168"></a>
-<span class="sourceLineNo">169</span>          .build();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      admin.move(hri.getEncodedNameAsBytes(), null);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      fail("Region should not be moved since it is fake");<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    } catch (IOException ioe) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      assertTrue(ioe instanceof UnknownRegionException);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    } finally {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      TEST_UTIL.deleteTable(tableName);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    }<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  @Test<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  public void testMoveThrowsPleaseHoldException() throws IOException {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    HMaster master = TEST_UTIL.getMiniHBaseCluster().getMaster();<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    HTableDescriptor htd = new HTableDescriptor(tableName);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    HColumnDescriptor hcd = new HColumnDescriptor("value");<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    htd.addFamily(hcd);<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span>    admin.createTable(htd, null);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    try {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      List&lt;RegionInfo&gt; tableRegions = admin.getRegions(tableName);<a name="line.189"></a>
-<span class="sourceLineNo">190</span><a name="line.190"></a>
-<span class="sourceLineNo">191</span>      master.setInitialized(false); // fake it, set back later<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      admin.move(tableRegions.get(0).getEncodedNameAsBytes(), null);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      fail("Region should not be moved since master is not initialized");<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    } catch (IOException ioe) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      assertTrue(StringUtils.stringifyException(ioe).contains("PleaseHoldException"));<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    } finally {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      master.setInitialized(true);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      TEST_UTIL.deleteTable(tableName);<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>  @Test<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  public void testFlushedSequenceIdPersistLoad() throws Exception {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    int msgInterval = conf.getInt("hbase.regionserver.msginterval", 100);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    // insert some data into META<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    TableName tableName = TableName.valueOf("testFlushSeqId");<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    HTableDescriptor desc = new HTableDescriptor(tableName);<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    desc.addFamily(new HColumnDescriptor(Bytes.toBytes("cf")));<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    Table table = TEST_UTIL.createTable(desc, null);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    // flush META region<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    TEST_UTIL.flush(TableName.META_TABLE_NAME);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // wait for regionserver report<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    Threads.sleep(msgInterval * 2);<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    // record flush seqid before cluster shutdown<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    Map&lt;byte[], Long&gt; regionMapBefore =<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        TEST_UTIL.getHBaseCluster().getMaster().getServerManager()<a name="line.217"></a>
-<span class="sourceLineNo">218</span>            .getFlushedSequenceIdByRegion();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    // restart hbase cluster which will cause flushed sequence id persist and reload<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    TEST_UTIL.getMiniHBaseCluster().shutdown();<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    TEST_UTIL.restartHBaseCluster(2);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    TEST_UTIL.waitUntilNoRegionsInTransition();<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    // check equality after reloading flushed sequence id map<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    Map&lt;byte[], Long&gt; regionMapAfter =<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        TEST_UTIL.getHBaseCluster().getMaster().getServerManager()<a name="line.225"></a>
-<span class="sourceLineNo">226</span>            .getFlushedSequenceIdByRegion();<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    assertTrue(regionMapBefore.equals(regionMapAfter));<a name="line.227"></a>
-<span class="sourceLineNo">228</span>  }<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>  @Test<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  public void testBlockingHbkc1WithLockFile() throws IOException {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    // This is how the patch to the lock file is created inside in HBaseFsck. Too hard to use its<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    // actual method without disturbing HBaseFsck... Do the below mimic instead.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    Path hbckLockPath = new Path(HBaseFsck.getTmpDir(TEST_UTIL.getConfiguration()),<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        HBaseFsck.HBCK_LOCK_FILE);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    FileSystem fs = TEST_UTIL.getTestFileSystem();<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    assertTrue(fs.exists(hbckLockPath));<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    TEST_UTIL.getMiniHBaseCluster().<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        killMaster(TEST_UTIL.getMiniHBaseCluster().getMaster().getServerName());<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    assertTrue(fs.exists(hbckLockPath));<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    TEST_UTIL.getMiniHBaseCluster().startMaster();<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    TEST_UTIL.waitFor(30000, () -&gt; TEST_UTIL.getMiniHBaseCluster().getMaster() != null &amp;&amp;<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        TEST_UTIL.getMiniHBaseCluster().getMaster().isInitialized());<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    assertTrue(fs.exists(hbckLockPath));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    // Start a second Master. Should be fine.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    TEST_UTIL.getMiniHBaseCluster().startMaster();<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    assertTrue(fs.exists(hbckLockPath));<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    fs.delete(hbckLockPath, true);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    assertFalse(fs.exists(hbckLockPath));<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    // Kill all Masters.<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    TEST_UTIL.getMiniHBaseCluster().getLiveMasterThreads().stream().<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        map(sn -&gt; sn.getMaster().getServerName()).forEach(sn -&gt; {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          try {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>            TEST_UTIL.getMiniHBaseCluster().killMaster(sn);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          } catch (IOException e) {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>            e.printStackTrace();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        });<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    // Start a new one.<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    TEST_UTIL.getMiniHBaseCluster().startMaster();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    TEST_UTIL.waitFor(30000, () -&gt; TEST_UTIL.getMiniHBaseCluster().getMaster() != null &amp;&amp;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        TEST_UTIL.getMiniHBaseCluster().getMaster().isInitialized());<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    // Assert lock gets put in place again.<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    assertTrue(fs.exists(hbckLockPath));<a name="line.264"></a>
-<span class="sourceLineNo">265</span>  }<a name="line.265"></a>
+<span class="sourceLineNo">023</span>import static org.junit.Assert.assertTrue;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.junit.Assert.fail;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.List;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.Map;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.conf.Configuration;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.fs.FileSystem;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.fs.Path;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.HConstants;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.MiniHBaseCluster;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.ServerName;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.TableName;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.Admin;<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.Table;<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.testclassification.MasterTests;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.HBaseFsck;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.util.StringUtils;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.junit.AfterClass;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.junit.BeforeClass;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.junit.ClassRule;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.junit.Rule;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.junit.Test;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.junit.experimental.categories.Category;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.junit.rules.TestName;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.slf4j.Logger;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.slf4j.LoggerFactory;<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>@Category({MasterTests.class, MediumTests.class})<a name="line.67"></a>
+<span class="sourceLineNo">068</span>public class TestMaster {<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  @ClassRule<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      HBaseClassTestRule.forClass(TestMaster.class);<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  private static final Logger LOG = LoggerFactory.getLogger(TestMaster.class);<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private static final TableName TABLENAME = TableName.valueOf("TestMaster");<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  private static final byte[] FAMILYNAME = Bytes.toBytes("fam");<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private static Admin admin;<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  @Rule<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  public TestName name = new TestName();<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>  @BeforeClass<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static void beforeAllTests() throws Exception {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    // we will retry operations when PleaseHoldException is thrown<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    TEST_UTIL.getConfiguration().setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER, 3);<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    // Start a cluster of two regionservers.<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    TEST_UTIL.startMiniCluster(2);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    admin = TEST_UTIL.getAdmin();<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>  @AfterClass<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public static void afterAllTests() throws Exception {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    TEST_UTIL.shutdownMiniCluster();<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>  @Test<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  @SuppressWarnings("deprecation")<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  public void testMasterOpsWhileSplitting() throws Exception {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    HMaster m = cluster.getMaster();<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>    try (Table ht = TEST_UTIL.createTable(TABLENAME, FAMILYNAME)) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      assertTrue(m.getTableStateManager().isTableState(TABLENAME, TableState.State.ENABLED));<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      TEST_UTIL.loadTable(ht, FAMILYNAME, false);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>    List&lt;Pair&lt;RegionInfo, ServerName&gt;&gt; tableRegions = MetaTableAccessor.getTableRegionsAndLocations(<a name="line.108"></a>
+<span class="sourceLineNo">109</span>        m.getConnection(), TABLENAME);<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    LOG.info("Regions after load: " + Joiner.on(',').join(tableRegions));<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    assertEquals(1, tableRegions.size());<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    assertArrayEquals(HConstants.EMPTY_START_ROW,<a name="line.112"></a>
+<span class="sourceLineNo">113</span>        tableRegions.get(0).getFirst().getStartKey());<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    assertArrayEquals(HConstants.EMPTY_END_ROW,<a name="line.114"></a>
+<span class="sourceLineNo">115</span>        tableRegions.get(0).getFirst().getEndKey());<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>    // Now trigger a split and stop when the split is in progress<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    LOG.info("Splitting table");<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    TEST_UTIL.getAdmin().split(TABLENAME);<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>    LOG.info("Making sure we can call getTableRegions while opening");<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    while (tableRegions.size() &lt; 3) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      tableRegions = MetaTableAccessor.getTableRegionsAndLocations(m.getConnection(),<a name="line.123"></a>
+<span class="sourceLineNo">124</span>          TABLENAME, false);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      Thread.sleep(100);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    LOG.info("Regions: " + Joiner.on(',').join(tableRegions));<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // We have three regions because one is split-in-progress<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    assertEquals(3, tableRegions.size());<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    LOG.info("Making sure we can call getTableRegionClosest while opening");<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    Pair&lt;RegionInfo, ServerName&gt; pair =<a name="line.131"></a>
+<span class="sourceLineNo">132</span>        m.getTableRegionForRow(TABLENAME, Bytes.toBytes("cde"));<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    LOG.info("Result is: " + pair);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    Pair&lt;RegionInfo, ServerName&gt; tableRegionFromName =<a name="line.134"></a>
+<span class="sourceLineNo">135</span>        MetaTableAccessor.getRegion(m.getConnection(),<a name="line.135"></a>
+<span class="sourceLineNo">136</span>          pair.getFirst().getRegionName());<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    assertTrue(RegionInfo.COMPARATOR.compare(tableRegionFromName.getFirst(), pair.getFirst()) == 0);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  }<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>  @Test<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  public void testMoveRegionWhenNotInitialized() {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    HMaster m = cluster.getMaster();<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    try {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      m.setInitialized(false); // fake it, set back later<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      RegionInfo meta = RegionInfoBuilder.FIRST_META_REGIONINFO;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      m.move(meta.getEncodedNameAsBytes(), null);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      fail("Region should not be moved since master is not initialized");<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    } catch (IOException ioe) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      assertTrue(ioe instanceof PleaseHoldException);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    } finally {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      m.setInitialized(true);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    }<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  @Test<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  public void testMoveThrowsUnknownRegionException() throws IOException {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    HTableDescriptor htd = new HTableDescriptor(tableName);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    HColumnDescriptor hcd = new HColumnDescriptor("value");<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    htd.addFamily(hcd);<a name="line.161"></a>
+<span class="sourceLineNo">162</span><a name="line.162"></a>
+<span class="sourceLineNo">163</span>    admin.createTable(htd, null);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    try {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      RegionInfo hri = RegionInfoBuilder.newBuilder(tableName)<a name="line.165"></a>
+<span class="sourceLineNo">166</span>          .setStartKey(Bytes.toBytes("A"))<a name="line.166"></a>
+<span class="sourceLineNo">167</span>          .setEndKey(Bytes.toBytes("Z"))<a name="line.167"></a>
+<span class="sourceLineNo">168</span>          .build();<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      admin.move(hri.getEncodedNameAsBytes(), null);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      fail("Region should not be moved since it is fake");<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    } catch (IOException ioe) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      assertTrue(ioe instanceof UnknownRegionException);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    } finally {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      TEST_UTIL.deleteTable(tableName);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    }<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>  @Test<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  public void testMoveThrowsPleaseHoldException() throws IOException {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    HMaster master = TEST_UTIL.getMiniHBaseCluster().getMaster();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    HTableDescriptor htd = new HTableDescriptor(tableName);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    HColumnDescriptor hcd = new HColumnDescriptor("value");<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    htd.addFamily(hcd);<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span>    admin.createTable(htd, null);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    try {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      List&lt;RegionInfo&gt; tableRegions = admin.getRegions(tableName);<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>      master.setInitialized(false); // fake it, set back later<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      admin.move(tableRegions.get(0).getEncodedNameAsBytes(), null);<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      fail("Region should not be moved since master is not initialized");<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    } catch (IOException ioe) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      assertTrue(StringUtils.stringifyException(ioe).contains("PleaseHoldException"));<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    } finally {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      master.setInitialized(true);<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      TEST_UTIL.deleteTable(tableName);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    }<a name="line.198"></a>
+<span class="sourceLineNo">199</span>  }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  @Test<a name="line.201"></a>
+<span class="sourceLineNo">202</span>  public void testFlushedSequenceIdPersistLoad() throws Exception {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    int msgInterval = conf.getInt("hbase.regionserver.msginterval", 100);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    // insert some data into META<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    TableName tableName = TableName.valueOf("testFlushSeqId");<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    HTableDescriptor desc = new HTableDescriptor(tableName);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    desc.addFamily(new HColumnDescriptor(Bytes.toBytes("cf")));<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    Table table = TEST_UTIL.createTable(desc, null);<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    // flush META region<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    TEST_UTIL.flush(TableName.META_TABLE_NAME);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    // wait for regionserver report<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    Threads.sleep(msgInterval * 2);<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    // record flush seqid before cluster shutdown<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    Map&lt;byte[], Long&gt; regionMapBefore =<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        TEST_UTIL.getHBaseCluster().getMaster().getServerManager()<a name="line.216"></a>
+<span class="sourceLineNo">217</span>            .getFlushedSequenceIdByRegion();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    // restart hbase cluster which will cause flushed sequence id persist and reload<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    TEST_UTIL.getMiniHBaseCluster().shutdown();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    TEST_UTIL.restartHBaseCluster(2);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    TEST_UTIL.waitUntilNoRegionsInTransition();<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    // check equality after reloading flushed sequence id map<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    Map&lt;byte[], Long&gt; regionMapAfter =<a name="line.223"></a>
+<span class="sourceLineNo">224</span>        TEST_UTIL.getHBaseCluster().getMaster().getServerManager()<a name="line.224"></a>
+<span class="sourceLineNo">225</span>            .getFlushedSequenceIdByRegion();<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    assertTrue(regionMapBefore.equals(regionMapAfter));<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  }<a name="line.227"></a>
+<span class="sourceLineNo">228</span><a name="line.228"></a>
+<span class="sourceLineNo">229</span>  @Test<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  public void testBlockingHbkc1WithLockFile() throws IOException {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    // This is how the patch to the lock file is created inside in HBaseFsck. Too hard to use its<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    // actual method without disturbing HBaseFsck... Do the below mimic instead.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    Path hbckLockPath = new Path(HBaseFsck.getTmpDir(TEST_UTIL.getConfiguration()),<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        HBaseFsck.HBCK_LOCK_FILE);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    FileSystem fs = TEST_UTIL.getTestFileSystem();<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    assertTrue(fs.exists(hbckLockPath));<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    TEST_UTIL.getMiniHBaseCluster().<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        killMaster(TEST_UTIL.getMiniHBaseCluster().getMaster().getServerName());<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    assertTrue(fs.exists(hbckLockPath));<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    TEST_UTIL.getMiniHBaseCluster().startMaster();<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    TEST_UTIL.waitFor(30000, () -&gt; TEST_UTIL.getMiniHBaseCluster().getMaster() != null &amp;&amp;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        TEST_UTIL.getMiniHBaseCluster().getMaster().isInitialized());<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    assertTrue(fs.exists(hbckLockPath));<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    // Start a second Master. Should be fine.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    TEST_UTIL.getMiniHBaseCluster().startMaster();<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    assertTrue(fs.exists(hbckLockPath));<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    fs.delete(hbckLockPath, true);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    assertFalse(fs.exists(hbckLockPath));<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    // Kill all Masters.<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    TEST_UTIL.getMiniHBaseCluster().getLiveMasterThreads().stream().<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        map(sn -&gt; sn.getMaster().getServerName()).forEach(sn -&gt; {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>          try {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>            TEST_UTIL.getMiniHBaseCluster().killMaster(sn);<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          } catch (IOException e) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>            e.printStackTrace();<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>    // Start a new one.<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    TEST_UTIL.getMiniHBaseCluster().startMaster();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    TEST_UTIL.waitFor(30000, () -&gt; TEST_UTIL.getMiniHBaseCluster().getMaster() != null &amp;&amp;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        TEST_UTIL.getMiniHBaseCluster().getMaster().isInitialized());<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    // Assert lock gets put in place again.<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    assertTrue(fs.exists(hbckLockPath));<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  }<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>  @Test<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  public void testMasterBlockCache() {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    // Master not carry table in default, so no need to instantiate block cache, too.<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    assertNull(TEST_UTIL.getMiniHBaseCluster().getMaster().getCacheConfig().getBlockCache());<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html
new file mode 100644
index 0000000..e1b6666
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html
@@ -0,0 +1,162 @@
+<!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;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import static org.junit.Assert.assertFalse;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertNull;<a name="line.21"></a>
+<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.conf.Configuration;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.regionserver.ChunkCreator;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.junit.AfterClass;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.junit.BeforeClass;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.junit.ClassRule;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.junit.Test;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.junit.experimental.categories.Category;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.slf4j.Logger;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.slf4j.LoggerFactory;<a name="line.36"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>@Category({MasterTests.class, MediumTests.class})<a name="line.38"></a>
+<span class="sourceLineNo">039</span>public class TestMasterNotCarryTable {<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>  @ClassRule<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.42"></a>
+<span class="sourceLineNo">043</span>      HBaseClassTestRule.forClass(TestMasterNotCarryTable.class);<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>  private static final Logger LOG = LoggerFactory.getLogger(TestMasterNotCarryTable.class);<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private static HMaster master;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  @BeforeClass<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  public static void setUp() throws Exception {<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    Configuration c = UTIL.getConfiguration();<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    // We use local filesystem.  Set it so it writes into the testdir.<a name="line.54"></a>
+<span class="sourceLineNo">055</span>    FSUtils.setRootDir(c, UTIL.getDataTestDir());<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    UTIL.startMiniZKCluster();<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    master = new HMaster(UTIL.getConfiguration());<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    master.start();<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    // As no regionservers, only wait master to create AssignmentManager.<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    while (master.getAssignmentManager() != null) {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      LOG.debug("Wait master to create AssignmentManager");<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      Thread.sleep(1000);<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    }<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  }<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  @AfterClass<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  public static void tearDown() throws Exception {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    master.stop("Shutdown");<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    UTIL.shutdownMiniZKCluster();<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  }<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  @Test<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  public void testMasterNotCarryTable() {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    // The default config is false<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    assertFalse(LoadBalancer.isTablesOnMaster(UTIL.getConfiguration()));<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    assertFalse(LoadBalancer.isSystemTablesOnlyOnMaster(UTIL.getConfiguration()));<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  }<a name="line.77"></a>
+<span class="sourceLineNo">078</span><a name="line.78"></a>
+<span class="sourceLineNo">079</span>  @Test<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  public void testMasterBlockCache() {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    // no need to instantiate block cache.<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    assertNull(master.getCacheConfig().getBlockCache());<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>  @Test<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  public void testMasterMemStoreLAB() {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    // no need to instantiate MemStoreLAB.<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    assertNull(ChunkCreator.getInstance());<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>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[22/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/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 1799704..abd92a9 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.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>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/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 85aecf0..a8df456 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -347,10 +347,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.<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>
 <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>
 <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>
 </ul>
 </li>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/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 6e2f971..4929ab8 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -437,18 +437,18 @@
 <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/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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/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/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/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 697794c..e99e63c 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -217,9 +217,9 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
 <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/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/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/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 79f4077..4cc1e5a 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/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/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/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/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/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/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottlingException.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/devapidocs/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.StatisticsThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.StatisticsThread.html b/devapidocs/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.StatisticsThread.html
index 8f7f5c3..7fbb7e2 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.StatisticsThread.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.StatisticsThread.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.411">ChunkCreator.MemStoreChunkPool.StatisticsThread</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.412">ChunkCreator.MemStoreChunkPool.StatisticsThread</a>
 extends <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></pre>
 </li>
 </ul>
@@ -232,7 +232,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>StatisticsThread</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.StatisticsThread.html#line.412">StatisticsThread</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.StatisticsThread.html#line.413">StatisticsThread</a>()</pre>
 </li>
 </ul>
 </li>
@@ -249,7 +249,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.StatisticsThread.html#line.418">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.StatisticsThread.html#line.419">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>
@@ -264,7 +264,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>logStats</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.StatisticsThread.html#line.422">logStats</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.StatisticsThread.html#line.423">logStats</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/devapidocs/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html b/devapidocs/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html
index 5e085a0..abd253c 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.320">ChunkCreator.MemStoreChunkPool</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.321">ChunkCreator.MemStoreChunkPool</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/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTuneObserver</a></pre>
 <div class="block">A pool of <a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver"><code>Chunk</code></a> instances.
@@ -299,7 +299,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemo
 <ul class="blockList">
 <li class="blockList">
 <h4>chunkSize</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.321">chunkSize</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.322">chunkSize</a></pre>
 </li>
 </ul>
 <a name="maxCount">
@@ -308,7 +308,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemo
 <ul class="blockList">
 <li class="blockList">
 <h4>maxCount</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.322">maxCount</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.323">maxCount</a></pre>
 </li>
 </ul>
 <a name="reclaimedChunks">
@@ -317,7 +317,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemo
 <ul class="blockList">
 <li class="blockList">
 <h4>reclaimedChunks</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.325">reclaimedChunks</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.326">reclaimedChunks</a></pre>
 </li>
 </ul>
 <a name="poolSizePercentage">
@@ -326,7 +326,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemo
 <ul class="blockList">
 <li class="blockList">
 <h4>poolSizePercentage</h4>
-<pre>private final&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.326">poolSizePercentage</a></pre>
+<pre>private final&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.327">poolSizePercentage</a></pre>
 </li>
 </ul>
 <a name="scheduleThreadPool">
@@ -335,7 +335,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemo
 <ul class="blockList">
 <li class="blockList">
 <h4>scheduleThreadPool</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.329">scheduleThreadPool</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.330">scheduleThreadPool</a></pre>
 <div class="block">Statistics thread schedule pool</div>
 </li>
 </ul>
@@ -345,7 +345,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemo
 <ul class="blockList">
 <li class="blockList">
 <h4>statThreadPeriod</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.331">statThreadPeriod</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.332">statThreadPeriod</a></pre>
 <div class="block">Statistics thread</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -359,7 +359,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemo
 <ul class="blockList">
 <li class="blockList">
 <h4>chunkCount</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/regionserver/ChunkCreator.MemStoreChunkPool.html#line.332">chunkCount</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/regionserver/ChunkCreator.MemStoreChunkPool.html#line.333">chunkCount</a></pre>
 </li>
 </ul>
 <a name="reusedChunkCount">
@@ -368,7 +368,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemo
 <ul class="blockList">
 <li class="blockList">
 <h4>reusedChunkCount</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.333">reusedChunkCount</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.334">reusedChunkCount</a></pre>
 </li>
 </ul>
 <a name="label">
@@ -377,7 +377,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemo
 <ul class="blockListLast">
 <li class="blockList">
 <h4>label</h4>
-<pre>private 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/regionserver/ChunkCreator.MemStoreChunkPool.html#line.334">label</a></pre>
+<pre>private 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/regionserver/ChunkCreator.MemStoreChunkPool.html#line.335">label</a></pre>
 </li>
 </ul>
 </li>
@@ -394,7 +394,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemo
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MemStoreChunkPool</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.336">MemStoreChunkPool</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;label,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.337">MemStoreChunkPool</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;label,
                   int&nbsp;chunkSize,
                   int&nbsp;maxCount,
                   int&nbsp;initialCount,
@@ -415,7 +415,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemo
 <ul class="blockList">
 <li class="blockList">
 <h4>getChunk</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.365">getChunk</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.366">getChunk</a>()</pre>
 <div class="block">Poll a chunk from the pool, reset it if not null, else create a new chunk to return if we have
  not yet created max allowed chunks count. When we have already created max allowed chunks and
  no free chunks as of now, return null. It is the responsibility of the caller to make a chunk
@@ -435,7 +435,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemo
 <ul class="blockList">
 <li class="blockList">
 <h4>getChunk</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.369">getChunk</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver">CompactingMemStore.IndexType</a>&nbsp;chunkIndexType)</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.370">getChunk</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver">CompactingMemStore.IndexType</a>&nbsp;chunkIndexType)</pre>
 </li>
 </ul>
 <a name="getChunkSize--">
@@ -444,7 +444,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemo
 <ul class="blockList">
 <li class="blockList">
 <h4>getChunkSize</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.391">getChunkSize</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.392">getChunkSize</a>()</pre>
 </li>
 </ul>
 <a name="putbackChunks-org.apache.hadoop.hbase.regionserver.Chunk-">
@@ -453,7 +453,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemo
 <ul class="blockList">
 <li class="blockList">
 <h4>putbackChunks</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.400">putbackChunks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;c)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.401">putbackChunks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;c)</pre>
 <div class="block">Add the chunks to the pool, when the pool achieves the max size, it will skip the remaining
  chunks</div>
 <dl>
@@ -468,7 +468,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemo
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxCount</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.434">getMaxCount</a>()</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.435">getMaxCount</a>()</pre>
 </li>
 </ul>
 <a name="onHeapMemoryTune-long-long-">
@@ -477,7 +477,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemo
 <ul class="blockListLast">
 <li class="blockList">
 <h4>onHeapMemoryTune</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.439">onHeapMemoryTune</a>(long&nbsp;newMemstoreSize,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html#line.440">onHeapMemoryTune</a>(long&nbsp;newMemstoreSize,
                              long&nbsp;newBlockCacheSize)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTuneObserver.html#onHeapMemoryTune-long-long-">HeapMemoryManager.HeapMemoryTuneObserver</a></code></span></div>
 <div class="block">This method would be called by HeapMemoryManger when a heap memory tune action took place.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/devapidocs/org/apache/hadoop/hbase/regionserver/ChunkCreator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/ChunkCreator.html b/devapidocs/org/apache/hadoop/hbase/regionserver/ChunkCreator.html
index c665e29..b599480 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/ChunkCreator.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/ChunkCreator.html
@@ -307,7 +307,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.html#getChunkSize-org.apache.hadoop.hbase.regionserver.ChunkCreator.ChunkType-">getChunkSize</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver">ChunkCreator.ChunkType</a>&nbsp;chunkType)</code>&nbsp;</td>
 </tr>
 <tr id="i13" class="rowColor">
-<td class="colFirst"><code>(package private) static <a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.html" title="class in org.apache.hadoop.hbase.regionserver">ChunkCreator</a></code></td>
+<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.html" title="class in org.apache.hadoop.hbase.regionserver">ChunkCreator</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.html#getInstance--">getInstance</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i14" class="altColor">
@@ -578,7 +578,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getInstance</h4>
-<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.html" title="class in org.apache.hadoop.hbase.regionserver">ChunkCreator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.138">getInstance</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.html" title="class in org.apache.hadoop.hbase.regionserver">ChunkCreator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.139">getInstance</a>()</pre>
 </li>
 </ul>
 <a name="getChunk-org.apache.hadoop.hbase.regionserver.ChunkCreator.ChunkType-">
@@ -587,7 +587,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getChunk</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.146">getChunk</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver">ChunkCreator.ChunkType</a>&nbsp;chunkType)</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.147">getChunk</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver">ChunkCreator.ChunkType</a>&nbsp;chunkType)</pre>
 <div class="block">Creates and inits a chunk. The default implementation for a specific chunk size.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -601,7 +601,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getChunk</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.154">getChunk</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.155">getChunk</a>()</pre>
 <div class="block">Creates and inits a chunk. The default implementation.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -615,7 +615,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getChunk</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.162">getChunk</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver">CompactingMemStore.IndexType</a>&nbsp;chunkIndexType)</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.163">getChunk</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver">CompactingMemStore.IndexType</a>&nbsp;chunkIndexType)</pre>
 <div class="block">Creates and inits a chunk. The default implementation for a specific index type.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -629,7 +629,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getChunk</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.170">getChunk</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver">CompactingMemStore.IndexType</a>&nbsp;chunkIndexType,
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.171">getChunk</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver">CompactingMemStore.IndexType</a>&nbsp;chunkIndexType,
                <a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver">ChunkCreator.ChunkType</a>&nbsp;chunkType)</pre>
 <div class="block">Creates and inits a chunk with specific index type and type.</div>
 <dl>
@@ -644,7 +644,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getChunk</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.194">getChunk</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver">CompactingMemStore.IndexType</a>&nbsp;chunkIndexType,
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.195">getChunk</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver">CompactingMemStore.IndexType</a>&nbsp;chunkIndexType,
                int&nbsp;size)</pre>
 <div class="block">Creates and inits a chunk.</div>
 <dl>
@@ -662,7 +662,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getJumboChunk</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.236">getJumboChunk</a>(int&nbsp;jumboSize)</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.237">getJumboChunk</a>(int&nbsp;jumboSize)</pre>
 <div class="block">Creates and inits a chunk of a special size, bigger than a regular chunk size.
  Such a chunk will never come from pool and will always be on demand allocated.</div>
 <dl>
@@ -679,7 +679,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createChunk</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.255">createChunk</a>(boolean&nbsp;pool,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.256">createChunk</a>(boolean&nbsp;pool,
                           <a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver">CompactingMemStore.IndexType</a>&nbsp;chunkIndexType,
                           int&nbsp;size)</pre>
 <div class="block">Creates the chunk either onheap or offheap</div>
@@ -699,7 +699,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createChunkForPool</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.274">createChunkForPool</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver">CompactingMemStore.IndexType</a>&nbsp;chunkIndexType,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.275">createChunkForPool</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver">CompactingMemStore.IndexType</a>&nbsp;chunkIndexType,
                                  int&nbsp;chunkSize)</pre>
 </li>
 </ul>
@@ -709,7 +709,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getChunk</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.284">getChunk</a>(int&nbsp;id)</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.285">getChunk</a>(int&nbsp;id)</pre>
 </li>
 </ul>
 <a name="isOffheap--">
@@ -718,7 +718,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isOffheap</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.289">isOffheap</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.290">isOffheap</a>()</pre>
 </li>
 </ul>
 <a name="removeChunks-java.util.Set-">
@@ -727,7 +727,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>removeChunks</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.293">removeChunks</a>(<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/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;chunkIDs)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.294">removeChunks</a>(<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/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;chunkIDs)</pre>
 </li>
 </ul>
 <a name="removeChunk-int-">
@@ -736,7 +736,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>removeChunk</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.297">removeChunk</a>(int&nbsp;chunkId)</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.298">removeChunk</a>(int&nbsp;chunkId)</pre>
 </li>
 </ul>
 <a name="numberOfMappedChunks--">
@@ -745,7 +745,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>numberOfMappedChunks</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.304">numberOfMappedChunks</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.305">numberOfMappedChunks</a>()</pre>
 </li>
 </ul>
 <a name="clearChunkIds--">
@@ -754,7 +754,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>clearChunkIds</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.309">clearChunkIds</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.310">clearChunkIds</a>()</pre>
 </li>
 </ul>
 <a name="clearDisableFlag--">
@@ -763,7 +763,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>clearDisableFlag</h4>
-<pre>static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.474">clearDisableFlag</a>()</pre>
+<pre>static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.475">clearDisableFlag</a>()</pre>
 </li>
 </ul>
 <a name="initializePool-java.lang.String-long-float-float-int-org.apache.hadoop.hbase.regionserver.HeapMemoryManager-">
@@ -772,7 +772,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>initializePool</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html" title="class in org.apache.hadoop.hbase.regionserver">ChunkCreator.MemStoreChunkPool</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.478">initializePool</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;label,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html" title="class in org.apache.hadoop.hbase.regionserver">ChunkCreator.MemStoreChunkPool</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.479">initializePool</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;label,
                                                       long&nbsp;globalMemStoreSize,
                                                       float&nbsp;poolSizePercentage,
                                                       float&nbsp;initialCountPercentage,
@@ -786,7 +786,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxCount</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.510">getMaxCount</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.511">getMaxCount</a>()</pre>
 </li>
 </ul>
 <a name="getMaxCount-org.apache.hadoop.hbase.regionserver.ChunkCreator.ChunkType-">
@@ -795,7 +795,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxCount</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.515">getMaxCount</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver">ChunkCreator.ChunkType</a>&nbsp;chunkType)</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.516">getMaxCount</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver">ChunkCreator.ChunkType</a>&nbsp;chunkType)</pre>
 </li>
 </ul>
 <a name="getPoolSize--">
@@ -804,7 +804,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getPoolSize</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.536">getPoolSize</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.537">getPoolSize</a>()</pre>
 </li>
 </ul>
 <a name="getPoolSize-org.apache.hadoop.hbase.regionserver.ChunkCreator.ChunkType-">
@@ -813,7 +813,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getPoolSize</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.541">getPoolSize</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver">ChunkCreator.ChunkType</a>&nbsp;chunkType)</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.542">getPoolSize</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver">ChunkCreator.ChunkType</a>&nbsp;chunkType)</pre>
 </li>
 </ul>
 <a name="isChunkInPool-int-">
@@ -822,7 +822,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isChunkInPool</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.561">isChunkInPool</a>(int&nbsp;chunkId)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.562">isChunkInPool</a>(int&nbsp;chunkId)</pre>
 </li>
 </ul>
 <a name="clearChunksInPool--">
@@ -831,7 +831,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>clearChunksInPool</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.580">clearChunksInPool</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.581">clearChunksInPool</a>()</pre>
 </li>
 </ul>
 <a name="getChunkSize--">
@@ -840,7 +840,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getChunkSize</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.589">getChunkSize</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.590">getChunkSize</a>()</pre>
 </li>
 </ul>
 <a name="getChunkSize-org.apache.hadoop.hbase.regionserver.ChunkCreator.ChunkType-">
@@ -849,7 +849,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getChunkSize</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.593">getChunkSize</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver">ChunkCreator.ChunkType</a>&nbsp;chunkType)</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.594">getChunkSize</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver">ChunkCreator.ChunkType</a>&nbsp;chunkType)</pre>
 </li>
 </ul>
 <a name="putbackChunks-java.util.Set-">
@@ -858,7 +858,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>putbackChunks</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.611">putbackChunks</a>(<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/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;chunks)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html#line.612">putbackChunks</a>(<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/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;chunks)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
index 1cdb358..ac5997f 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1723">HRegionServer.CompactionChecker</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1722">HRegionServer.CompactionChecker</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></pre>
 </li>
 </ul>
@@ -233,7 +233,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>instance</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1724">instance</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1723">instance</a></pre>
 </li>
 </ul>
 <a name="majorCompactPriority">
@@ -242,7 +242,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>majorCompactPriority</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1725">majorCompactPriority</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1724">majorCompactPriority</a></pre>
 </li>
 </ul>
 <a name="DEFAULT_PRIORITY">
@@ -251,7 +251,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_PRIORITY</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1726">DEFAULT_PRIORITY</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1725">DEFAULT_PRIORITY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.CompactionChecker.DEFAULT_PRIORITY">Constant Field Values</a></dd>
@@ -264,7 +264,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>iteration</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1729">iteration</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1728">iteration</a></pre>
 </li>
 </ul>
 </li>
@@ -281,7 +281,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CompactionChecker</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1731">CompactionChecker</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;h,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1730">CompactionChecker</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;h,
                   int&nbsp;sleepTime,
                   <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper)</pre>
 </li>
@@ -300,7 +300,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>chore</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1745">chore</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1744">chore</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#chore--">ScheduledChore</a></code></span></div>
 <div class="block">The task to execute on each scheduled execution of the Chore</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
index 3a28166..91904e9 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3438">HRegionServer.MovedRegionInfo</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3437">HRegionServer.MovedRegionInfo</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>
@@ -218,7 +218,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>serverName</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3439">serverName</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3438">serverName</a></pre>
 </li>
 </ul>
 <a name="seqNum">
@@ -227,7 +227,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>seqNum</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3440">seqNum</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3439">seqNum</a></pre>
 </li>
 </ul>
 <a name="ts">
@@ -236,7 +236,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ts</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3441">ts</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3440">ts</a></pre>
 </li>
 </ul>
 </li>
@@ -253,7 +253,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MovedRegionInfo</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3443">MovedRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3442">MovedRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                        long&nbsp;closeSeqNum)</pre>
 </li>
 </ul>
@@ -271,7 +271,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerName</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3449">getServerName</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3448">getServerName</a>()</pre>
 </li>
 </ul>
 <a name="getSeqNum--">
@@ -280,7 +280,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getSeqNum</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3453">getSeqNum</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3452">getSeqNum</a>()</pre>
 </li>
 </ul>
 <a name="getMoveTime--">
@@ -289,7 +289,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getMoveTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3457">getMoveTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3456">getMoveTime</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
index 240e740..4934310 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>protected static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3525">HRegionServer.MovedRegionsCleaner</a>
+<pre>protected static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3524">HRegionServer.MovedRegionsCleaner</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></pre>
 <div class="block">Creates a Chore thread to clean the moved region cache.</div>
@@ -242,7 +242,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>regionServer</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3526">regionServer</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3525">regionServer</a></pre>
 </li>
 </ul>
 <a name="stoppable">
@@ -251,7 +251,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockListLast">
 <li class="blockList">
 <h4>stoppable</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3527">stoppable</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3526">stoppable</a></pre>
 </li>
 </ul>
 </li>
@@ -268,7 +268,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MovedRegionsCleaner</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3529">MovedRegionsCleaner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;regionServer,
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3528">MovedRegionsCleaner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;regionServer,
                             <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stoppable)</pre>
 </li>
 </ul>
@@ -286,7 +286,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>create</h4>
-<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionsCleaner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3537">create</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;rs)</pre>
+<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionsCleaner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3536">create</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;rs)</pre>
 </li>
 </ul>
 <a name="chore--">
@@ -295,7 +295,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>chore</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3548">chore</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3547">chore</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#chore--">ScheduledChore</a></code></span></div>
 <div class="block">The task to execute on each scheduled execution of the Chore</div>
 <dl>
@@ -310,7 +310,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3553">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/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3552">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>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html#stop-java.lang.String-">Stoppable</a></code></span></div>
 <div class="block">Stop this service.
  Implementers should favor logging errors over throwing RuntimeExceptions.</div>
@@ -328,7 +328,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isStopped</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3558">isStopped</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3557">isStopped</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html#isStopped--">isStopped</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
index fe2142f..dd31dd4 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1785">HRegionServer.PeriodicMemStoreFlusher</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1784">HRegionServer.PeriodicMemStoreFlusher</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></pre>
 </li>
 </ul>
@@ -232,7 +232,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>server</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1786">server</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1785">server</a></pre>
 </li>
 </ul>
 <a name="RANGE_OF_DELAY">
@@ -241,7 +241,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>RANGE_OF_DELAY</h4>
-<pre>static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1787">RANGE_OF_DELAY</a></pre>
+<pre>static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1786">RANGE_OF_DELAY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.PeriodicMemStoreFlusher.RANGE_OF_DELAY">Constant Field Values</a></dd>
@@ -254,7 +254,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>MIN_DELAY_TIME</h4>
-<pre>static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1788">MIN_DELAY_TIME</a></pre>
+<pre>static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1787">MIN_DELAY_TIME</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.PeriodicMemStoreFlusher.MIN_DELAY_TIME">Constant Field Values</a></dd>
@@ -267,7 +267,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>rangeOfDelay</h4>
-<pre>final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1790">rangeOfDelay</a></pre>
+<pre>final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1789">rangeOfDelay</a></pre>
 </li>
 </ul>
 </li>
@@ -284,7 +284,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>PeriodicMemStoreFlusher</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1791">PeriodicMemStoreFlusher</a>(int&nbsp;cacheFlushInterval,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1790">PeriodicMemStoreFlusher</a>(int&nbsp;cacheFlushInterval,
                                <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;server)</pre>
 </li>
 </ul>
@@ -302,7 +302,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>chore</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1800">chore</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1799">chore</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#chore--">ScheduledChore</a></code></span></div>
 <div class="block">The task to execute on each scheduled execution of the Chore</div>
 <dl>


[07/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
index bf81ebb..a170ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
@@ -606,3246 +606,3245 @@
 <span class="sourceLineNo">598</span><a name="line.598"></a>
 <span class="sourceLineNo">599</span>      regionServerAccounting = new RegionServerAccounting(conf);<a name="line.599"></a>
 <span class="sourceLineNo">600</span>      boolean isMasterNotCarryTable =<a name="line.600"></a>
-<span class="sourceLineNo">601</span>          this instanceof HMaster &amp;&amp; !LoadBalancer.isTablesOnMaster(conf) &amp;&amp; !LoadBalancer<a name="line.601"></a>
-<span class="sourceLineNo">602</span>              .isSystemTablesOnlyOnMaster(conf);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      cacheConfig = new CacheConfig(conf, !isMasterNotCarryTable);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      mobCacheConfig = new MobCacheConfig(conf, !isMasterNotCarryTable);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      uncaughtExceptionHandler = new UncaughtExceptionHandler() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>        @Override<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        public void uncaughtException(Thread t, Throwable e) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>          abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        }<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      };<a name="line.610"></a>
-<span class="sourceLineNo">611</span><a name="line.611"></a>
-<span class="sourceLineNo">612</span>      initializeFileSystem();<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      spanReceiverHost = SpanReceiverHost.getInstance(getConfiguration());<a name="line.613"></a>
-<span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>      this.configurationManager = new ConfigurationManager();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      setupWindows(getConfiguration(), getConfigurationManager());<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>      // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>        // Open connection to zookeeper and set primary watcher<a name="line.620"></a>
-<span class="sourceLineNo">621</span>        zooKeeper = new ZKWatcher(conf, getProcessName() + ":" +<a name="line.621"></a>
-<span class="sourceLineNo">622</span>          rpcServices.isa.getPort(), this, canCreateBaseZNode());<a name="line.622"></a>
-<span class="sourceLineNo">623</span>        // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.623"></a>
-<span class="sourceLineNo">624</span>        if (!this.masterless) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>          this.csm = new ZkCoordinatedStateManager(this);<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span>          masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.627"></a>
-<span class="sourceLineNo">628</span>          masterAddressTracker.start();<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>          clusterStatusTracker = new ClusterStatusTracker(zooKeeper, this);<a name="line.630"></a>
-<span class="sourceLineNo">631</span>          clusterStatusTracker.start();<a name="line.631"></a>
-<span class="sourceLineNo">632</span>        } else {<a name="line.632"></a>
-<span class="sourceLineNo">633</span>          masterAddressTracker = null;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>          clusterStatusTracker = null;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>        }<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      } else {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>        zooKeeper = null;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        masterAddressTracker = null;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        clusterStatusTracker = null;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      }<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      this.rpcServices.start(zooKeeper);<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      // This violates 'no starting stuff in Constructor' but Master depends on the below chore<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      // and executor being created and takes a different startup route. Lots of overlap between HRS<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      // and M (An M IS A HRS now). Need to refactor so less duplication between M and its super<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      // Master expects Constructor to put up web servers. Ugh.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      // class HRS. TODO.<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      this.choreService = new ChoreService(getName(), true);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      this.executorService = new ExecutorService(getName());<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      putUpWebUI();<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    } catch (Throwable t) {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      // cause of failed startup is lost.<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      LOG.error("Failed construction RegionServer", t);<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      throw t;<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>  }<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span>  // HMaster should override this method to load the specific config for master<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    String hostname = conf.get(RS_HOSTNAME_KEY);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    if (conf.getBoolean(RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.662"></a>
-<span class="sourceLineNo">663</span>        String msg = RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and " + RS_HOSTNAME_KEY +<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          " are mutually exclusive. Do not set " + RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY +<a name="line.664"></a>
-<span class="sourceLineNo">665</span>          " to true while " + RS_HOSTNAME_KEY + " is used";<a name="line.665"></a>
-<span class="sourceLineNo">666</span>        throw new IOException(msg);<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      } else {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        return rpcServices.isa.getHostName();<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      }<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    } else {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>      return hostname;<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    }<a name="line.672"></a>
-<span class="sourceLineNo">673</span>  }<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span>  /**<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   * If running on Windows, do windows-specific setup.<a name="line.676"></a>
-<span class="sourceLineNo">677</span>   */<a name="line.677"></a>
-<span class="sourceLineNo">678</span>  private static void setupWindows(final Configuration conf, ConfigurationManager cm) {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    if (!SystemUtils.IS_OS_WINDOWS) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      Signal.handle(new Signal("HUP"), new SignalHandler() {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        @Override<a name="line.681"></a>
-<span class="sourceLineNo">682</span>        public void handle(Signal signal) {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          conf.reloadConfiguration();<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          cm.notifyAllObservers(conf);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>        }<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><a name="line.689"></a>
-<span class="sourceLineNo">690</span>  private static NettyEventLoopGroupConfig setupNetty(Configuration conf) {<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    // Initialize netty event loop group at start as we may use it for rpc server, rpc client &amp; WAL.<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    NettyEventLoopGroupConfig nelgc =<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      new NettyEventLoopGroupConfig(conf, "RS-EventLoopGroup");<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    NettyRpcClientConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    NettyAsyncFSWALConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    return nelgc;<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 void initializeFileSystem() throws IOException {<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    // Get fs instance used by this RS.  Do we use checksum verification in the hbase? If hbase<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    // checksum verification enabled, then automatically switch off hdfs checksum verification.<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    boolean useHBaseChecksum = conf.getBoolean(HConstants.HBASE_CHECKSUM_VERIFICATION, true);<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    FSUtils.setFsDefault(this.conf, FSUtils.getWALRootDir(this.conf));<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    this.walFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    this.walRootDir = FSUtils.getWALRootDir(this.conf);<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    // Set 'fs.defaultFS' to match the filesystem on hbase.rootdir else<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    // underlying hadoop hdfs accessors will be going against wrong filesystem<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    // (unless all is set to defaults).<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    FSUtils.setFsDefault(this.conf, FSUtils.getRootDir(this.conf));<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    this.fs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    this.rootDir = FSUtils.getRootDir(this.conf);<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    this.tableDescriptors = getFsTableDescriptors();<a name="line.712"></a>
-<span class="sourceLineNo">713</span>  }<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span>  protected TableDescriptors getFsTableDescriptors() throws IOException {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    return new FSTableDescriptors(this.conf,<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      this.fs, this.rootDir, !canUpdateTableDescriptor(), false, getMetaTableObserver());<a name="line.717"></a>
-<span class="sourceLineNo">718</span>  }<a name="line.718"></a>
-<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>  protected Function&lt;TableDescriptorBuilder, TableDescriptorBuilder&gt; getMetaTableObserver() {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    return null;<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  }<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    user.login("hbase.regionserver.keytab.file",<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      "hbase.regionserver.kerberos.principal", host);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>  }<a name="line.727"></a>
+<span class="sourceLineNo">601</span>          this instanceof HMaster &amp;&amp; !LoadBalancer.isTablesOnMaster(conf);<a name="line.601"></a>
+<span class="sourceLineNo">602</span>      cacheConfig = new CacheConfig(conf, !isMasterNotCarryTable);<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      mobCacheConfig = new MobCacheConfig(conf, !isMasterNotCarryTable);<a name="line.603"></a>
+<span class="sourceLineNo">604</span>      uncaughtExceptionHandler = new UncaughtExceptionHandler() {<a name="line.604"></a>
+<span class="sourceLineNo">605</span>        @Override<a name="line.605"></a>
+<span class="sourceLineNo">606</span>        public void uncaughtException(Thread t, Throwable e) {<a name="line.606"></a>
+<span class="sourceLineNo">607</span>          abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.607"></a>
+<span class="sourceLineNo">608</span>        }<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      };<a name="line.609"></a>
+<span class="sourceLineNo">610</span><a name="line.610"></a>
+<span class="sourceLineNo">611</span>      initializeFileSystem();<a name="line.611"></a>
+<span class="sourceLineNo">612</span>      spanReceiverHost = SpanReceiverHost.getInstance(getConfiguration());<a name="line.612"></a>
+<span class="sourceLineNo">613</span><a name="line.613"></a>
+<span class="sourceLineNo">614</span>      this.configurationManager = new ConfigurationManager();<a name="line.614"></a>
+<span class="sourceLineNo">615</span>      setupWindows(getConfiguration(), getConfigurationManager());<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span>      // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.617"></a>
+<span class="sourceLineNo">618</span>      if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>        // Open connection to zookeeper and set primary watcher<a name="line.619"></a>
+<span class="sourceLineNo">620</span>        zooKeeper = new ZKWatcher(conf, getProcessName() + ":" +<a name="line.620"></a>
+<span class="sourceLineNo">621</span>          rpcServices.isa.getPort(), this, canCreateBaseZNode());<a name="line.621"></a>
+<span class="sourceLineNo">622</span>        // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.622"></a>
+<span class="sourceLineNo">623</span>        if (!this.masterless) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>          this.csm = new ZkCoordinatedStateManager(this);<a name="line.624"></a>
+<span class="sourceLineNo">625</span><a name="line.625"></a>
+<span class="sourceLineNo">626</span>          masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.626"></a>
+<span class="sourceLineNo">627</span>          masterAddressTracker.start();<a name="line.627"></a>
+<span class="sourceLineNo">628</span><a name="line.628"></a>
+<span class="sourceLineNo">629</span>          clusterStatusTracker = new ClusterStatusTracker(zooKeeper, this);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>          clusterStatusTracker.start();<a name="line.630"></a>
+<span class="sourceLineNo">631</span>        } else {<a name="line.631"></a>
+<span class="sourceLineNo">632</span>          masterAddressTracker = null;<a name="line.632"></a>
+<span class="sourceLineNo">633</span>          clusterStatusTracker = null;<a name="line.633"></a>
+<span class="sourceLineNo">634</span>        }<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      } else {<a name="line.635"></a>
+<span class="sourceLineNo">636</span>        zooKeeper = null;<a name="line.636"></a>
+<span class="sourceLineNo">637</span>        masterAddressTracker = null;<a name="line.637"></a>
+<span class="sourceLineNo">638</span>        clusterStatusTracker = null;<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      }<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      this.rpcServices.start(zooKeeper);<a name="line.640"></a>
+<span class="sourceLineNo">641</span>      // This violates 'no starting stuff in Constructor' but Master depends on the below chore<a name="line.641"></a>
+<span class="sourceLineNo">642</span>      // and executor being created and takes a different startup route. Lots of overlap between HRS<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      // and M (An M IS A HRS now). Need to refactor so less duplication between M and its super<a name="line.643"></a>
+<span class="sourceLineNo">644</span>      // Master expects Constructor to put up web servers. Ugh.<a name="line.644"></a>
+<span class="sourceLineNo">645</span>      // class HRS. TODO.<a name="line.645"></a>
+<span class="sourceLineNo">646</span>      this.choreService = new ChoreService(getName(), true);<a name="line.646"></a>
+<span class="sourceLineNo">647</span>      this.executorService = new ExecutorService(getName());<a name="line.647"></a>
+<span class="sourceLineNo">648</span>      putUpWebUI();<a name="line.648"></a>
+<span class="sourceLineNo">649</span>    } catch (Throwable t) {<a name="line.649"></a>
+<span class="sourceLineNo">650</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      // cause of failed startup is lost.<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      LOG.error("Failed construction RegionServer", t);<a name="line.652"></a>
+<span class="sourceLineNo">653</span>      throw t;<a name="line.653"></a>
+<span class="sourceLineNo">654</span>    }<a name="line.654"></a>
+<span class="sourceLineNo">655</span>  }<a name="line.655"></a>
+<span class="sourceLineNo">656</span><a name="line.656"></a>
+<span class="sourceLineNo">657</span>  // HMaster should override this method to load the specific config for master<a name="line.657"></a>
+<span class="sourceLineNo">658</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.658"></a>
+<span class="sourceLineNo">659</span>    String hostname = conf.get(RS_HOSTNAME_KEY);<a name="line.659"></a>
+<span class="sourceLineNo">660</span>    if (conf.getBoolean(RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>        String msg = RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and " + RS_HOSTNAME_KEY +<a name="line.662"></a>
+<span class="sourceLineNo">663</span>          " are mutually exclusive. Do not set " + RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY +<a name="line.663"></a>
+<span class="sourceLineNo">664</span>          " to true while " + RS_HOSTNAME_KEY + " is used";<a name="line.664"></a>
+<span class="sourceLineNo">665</span>        throw new IOException(msg);<a name="line.665"></a>
+<span class="sourceLineNo">666</span>      } else {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>        return rpcServices.isa.getHostName();<a name="line.667"></a>
+<span class="sourceLineNo">668</span>      }<a name="line.668"></a>
+<span class="sourceLineNo">669</span>    } else {<a name="line.669"></a>
+<span class="sourceLineNo">670</span>      return hostname;<a name="line.670"></a>
+<span class="sourceLineNo">671</span>    }<a name="line.671"></a>
+<span class="sourceLineNo">672</span>  }<a name="line.672"></a>
+<span class="sourceLineNo">673</span><a name="line.673"></a>
+<span class="sourceLineNo">674</span>  /**<a name="line.674"></a>
+<span class="sourceLineNo">675</span>   * If running on Windows, do windows-specific setup.<a name="line.675"></a>
+<span class="sourceLineNo">676</span>   */<a name="line.676"></a>
+<span class="sourceLineNo">677</span>  private static void setupWindows(final Configuration conf, ConfigurationManager cm) {<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    if (!SystemUtils.IS_OS_WINDOWS) {<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      Signal.handle(new Signal("HUP"), new SignalHandler() {<a name="line.679"></a>
+<span class="sourceLineNo">680</span>        @Override<a name="line.680"></a>
+<span class="sourceLineNo">681</span>        public void handle(Signal signal) {<a name="line.681"></a>
+<span class="sourceLineNo">682</span>          conf.reloadConfiguration();<a name="line.682"></a>
+<span class="sourceLineNo">683</span>          cm.notifyAllObservers(conf);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>        }<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      });<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 static NettyEventLoopGroupConfig setupNetty(Configuration conf) {<a name="line.689"></a>
+<span class="sourceLineNo">690</span>    // Initialize netty event loop group at start as we may use it for rpc server, rpc client &amp; WAL.<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    NettyEventLoopGroupConfig nelgc =<a name="line.691"></a>
+<span class="sourceLineNo">692</span>      new NettyEventLoopGroupConfig(conf, "RS-EventLoopGroup");<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    NettyRpcClientConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    NettyAsyncFSWALConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    return nelgc;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>  }<a name="line.696"></a>
+<span class="sourceLineNo">697</span><a name="line.697"></a>
+<span class="sourceLineNo">698</span>  private void initializeFileSystem() throws IOException {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>    // Get fs instance used by this RS.  Do we use checksum verification in the hbase? If hbase<a name="line.699"></a>
+<span class="sourceLineNo">700</span>    // checksum verification enabled, then automatically switch off hdfs checksum verification.<a name="line.700"></a>
+<span class="sourceLineNo">701</span>    boolean useHBaseChecksum = conf.getBoolean(HConstants.HBASE_CHECKSUM_VERIFICATION, true);<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    FSUtils.setFsDefault(this.conf, FSUtils.getWALRootDir(this.conf));<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    this.walFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>    this.walRootDir = FSUtils.getWALRootDir(this.conf);<a name="line.704"></a>
+<span class="sourceLineNo">705</span>    // Set 'fs.defaultFS' to match the filesystem on hbase.rootdir else<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    // underlying hadoop hdfs accessors will be going against wrong filesystem<a name="line.706"></a>
+<span class="sourceLineNo">707</span>    // (unless all is set to defaults).<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    FSUtils.setFsDefault(this.conf, FSUtils.getRootDir(this.conf));<a name="line.708"></a>
+<span class="sourceLineNo">709</span>    this.fs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.709"></a>
+<span class="sourceLineNo">710</span>    this.rootDir = FSUtils.getRootDir(this.conf);<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    this.tableDescriptors = getFsTableDescriptors();<a name="line.711"></a>
+<span class="sourceLineNo">712</span>  }<a name="line.712"></a>
+<span class="sourceLineNo">713</span><a name="line.713"></a>
+<span class="sourceLineNo">714</span>  protected TableDescriptors getFsTableDescriptors() throws IOException {<a name="line.714"></a>
+<span class="sourceLineNo">715</span>    return new FSTableDescriptors(this.conf,<a name="line.715"></a>
+<span class="sourceLineNo">716</span>      this.fs, this.rootDir, !canUpdateTableDescriptor(), false, getMetaTableObserver());<a name="line.716"></a>
+<span class="sourceLineNo">717</span>  }<a name="line.717"></a>
+<span class="sourceLineNo">718</span><a name="line.718"></a>
+<span class="sourceLineNo">719</span>  protected Function&lt;TableDescriptorBuilder, TableDescriptorBuilder&gt; getMetaTableObserver() {<a name="line.719"></a>
+<span class="sourceLineNo">720</span>    return null;<a name="line.720"></a>
+<span class="sourceLineNo">721</span>  }<a name="line.721"></a>
+<span class="sourceLineNo">722</span><a name="line.722"></a>
+<span class="sourceLineNo">723</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.723"></a>
+<span class="sourceLineNo">724</span>    user.login("hbase.regionserver.keytab.file",<a name="line.724"></a>
+<span class="sourceLineNo">725</span>      "hbase.regionserver.kerberos.principal", host);<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><a name="line.729"></a>
-<span class="sourceLineNo">730</span>  /**<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * Wait for an active Master.<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   * See override in Master superclass for how it is used.<a name="line.732"></a>
-<span class="sourceLineNo">733</span>   */<a name="line.733"></a>
-<span class="sourceLineNo">734</span>  protected void waitForMasterActive() {}<a name="line.734"></a>
-<span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>  protected String getProcessName() {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    return REGIONSERVER;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  protected boolean canCreateBaseZNode() {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    return this.masterless;<a name="line.741"></a>
-<span class="sourceLineNo">742</span>  }<a name="line.742"></a>
-<span class="sourceLineNo">743</span><a name="line.743"></a>
-<span class="sourceLineNo">744</span>  protected boolean canUpdateTableDescriptor() {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    return false;<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
-<span class="sourceLineNo">747</span><a name="line.747"></a>
-<span class="sourceLineNo">748</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    return new RSRpcServices(this);<a name="line.749"></a>
-<span class="sourceLineNo">750</span>  }<a name="line.750"></a>
-<span class="sourceLineNo">751</span><a name="line.751"></a>
-<span class="sourceLineNo">752</span>  protected void configureInfoServer() {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    infoServer.addServlet("rs-status", "/rs-status", RSStatusServlet.class);<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    infoServer.setAttribute(REGIONSERVER, this);<a name="line.754"></a>
-<span class="sourceLineNo">755</span>  }<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    return RSDumpServlet.class;<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>  @Override<a name="line.761"></a>
-<span class="sourceLineNo">762</span>  public boolean registerService(com.google.protobuf.Service instance) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    /*<a name="line.763"></a>
-<span class="sourceLineNo">764</span>     * No stacking of instances is allowed for a single executorService name<a name="line.764"></a>
-<span class="sourceLineNo">765</span>     */<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    com.google.protobuf.Descriptors.ServiceDescriptor serviceDesc =<a name="line.766"></a>
-<span class="sourceLineNo">767</span>        instance.getDescriptorForType();<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      LOG.error("Coprocessor executorService " + serviceName<a name="line.770"></a>
-<span class="sourceLineNo">771</span>          + " already registered, rejecting request from " + instance);<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      return false;<a name="line.772"></a>
-<span class="sourceLineNo">773</span>    }<a name="line.773"></a>
-<span class="sourceLineNo">774</span><a name="line.774"></a>
-<span class="sourceLineNo">775</span>    coprocessorServiceHandlers.put(serviceName, instance);<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    if (LOG.isDebugEnabled()) {<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      LOG.debug("Registered regionserver coprocessor executorService: executorService=" + serviceName);<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    }<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    return true;<a name="line.779"></a>
-<span class="sourceLineNo">780</span>  }<a name="line.780"></a>
-<span class="sourceLineNo">781</span><a name="line.781"></a>
-<span class="sourceLineNo">782</span>  /**<a name="line.782"></a>
-<span class="sourceLineNo">783</span>   * Create a 'smarter' Connection, one that is capable of by-passing RPC if the request is to<a name="line.783"></a>
-<span class="sourceLineNo">784</span>   * the local server; i.e. a short-circuit Connection. Safe to use going to local or remote<a name="line.784"></a>
-<span class="sourceLineNo">785</span>   * server. Create this instance in a method can be intercepted and mocked in tests.<a name="line.785"></a>
-<span class="sourceLineNo">786</span>   * @throws IOException<a name="line.786"></a>
-<span class="sourceLineNo">787</span>   */<a name="line.787"></a>
-<span class="sourceLineNo">788</span>  @VisibleForTesting<a name="line.788"></a>
-<span class="sourceLineNo">789</span>  protected ClusterConnection createClusterConnection() throws IOException {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    Configuration conf = this.conf;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    if (conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM) != null) {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      // Use server ZK cluster for server-issued connections, so we clone<a name="line.792"></a>
-<span class="sourceLineNo">793</span>      // the conf and unset the client ZK related properties<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      conf = new Configuration(this.conf);<a name="line.794"></a>
-<span class="sourceLineNo">795</span>      conf.unset(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>    }<a name="line.796"></a>
-<span class="sourceLineNo">797</span>    // Create a cluster connection that when appropriate, can short-circuit and go directly to the<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    // local server if the request is to the local server bypassing RPC. Can be used for both local<a name="line.798"></a>
-<span class="sourceLineNo">799</span>    // and remote invocations.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    return ConnectionUtils.createShortCircuitConnection(conf, null, userProvider.getCurrent(),<a name="line.800"></a>
-<span class="sourceLineNo">801</span>      serverName, rpcServices, rpcServices);<a name="line.801"></a>
-<span class="sourceLineNo">802</span>  }<a name="line.802"></a>
-<span class="sourceLineNo">803</span><a name="line.803"></a>
-<span class="sourceLineNo">804</span>  /**<a name="line.804"></a>
-<span class="sourceLineNo">805</span>   * Run test on configured codecs to make sure supporting libs are in place.<a name="line.805"></a>
-<span class="sourceLineNo">806</span>   * @param c<a name="line.806"></a>
-<span class="sourceLineNo">807</span>   * @throws IOException<a name="line.807"></a>
-<span class="sourceLineNo">808</span>   */<a name="line.808"></a>
-<span class="sourceLineNo">809</span>  private static void checkCodecs(final Configuration c) throws IOException {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    // check to see if the codec list is available:<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    String [] codecs = c.getStrings("hbase.regionserver.codecs", (String[])null);<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    if (codecs == null) return;<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    for (String codec : codecs) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>      if (!CompressionTest.testCompression(codec)) {<a name="line.814"></a>
-<span class="sourceLineNo">815</span>        throw new IOException("Compression codec " + codec +<a name="line.815"></a>
-<span class="sourceLineNo">816</span>          " not supported, aborting RS construction");<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      }<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
-<span class="sourceLineNo">819</span>  }<a name="line.819"></a>
-<span class="sourceLineNo">820</span><a name="line.820"></a>
-<span class="sourceLineNo">821</span>  public String getClusterId() {<a name="line.821"></a>
-<span class="sourceLineNo">822</span>    return this.clusterId;<a name="line.822"></a>
-<span class="sourceLineNo">823</span>  }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>  /**<a name="line.825"></a>
-<span class="sourceLineNo">826</span>   * Setup our cluster connection if not already initialized.<a name="line.826"></a>
-<span class="sourceLineNo">827</span>   * @throws IOException<a name="line.827"></a>
-<span class="sourceLineNo">828</span>   */<a name="line.828"></a>
-<span class="sourceLineNo">829</span>  protected synchronized void setupClusterConnection() throws IOException {<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    if (clusterConnection == null) {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>      clusterConnection = createClusterConnection();<a name="line.831"></a>
-<span class="sourceLineNo">832</span>      metaTableLocator = new MetaTableLocator();<a name="line.832"></a>
-<span class="sourceLineNo">833</span>    }<a name="line.833"></a>
-<span class="sourceLineNo">834</span>  }<a name="line.834"></a>
-<span class="sourceLineNo">835</span><a name="line.835"></a>
-<span class="sourceLineNo">836</span>  /**<a name="line.836"></a>
-<span class="sourceLineNo">837</span>   * All initialization needed before we go register with Master.&lt;br&gt;<a name="line.837"></a>
-<span class="sourceLineNo">838</span>   * Do bare minimum. Do bulk of initializations AFTER we've connected to the Master.&lt;br&gt;<a name="line.838"></a>
-<span class="sourceLineNo">839</span>   * In here we just put up the RpcServer, setup Connection, and ZooKeeper.<a name="line.839"></a>
-<span class="sourceLineNo">840</span>   */<a name="line.840"></a>
-<span class="sourceLineNo">841</span>  private void preRegistrationInitialization() {<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    try {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      initializeZooKeeper();<a name="line.843"></a>
-<span class="sourceLineNo">844</span>      setupClusterConnection();<a name="line.844"></a>
-<span class="sourceLineNo">845</span>      // Setup RPC client for master communication<a name="line.845"></a>
-<span class="sourceLineNo">846</span>      this.rpcClient = RpcClientFactory.createClient(conf, clusterId, new InetSocketAddress(<a name="line.846"></a>
-<span class="sourceLineNo">847</span>          this.rpcServices.isa.getAddress(), 0), clusterConnection.getConnectionMetrics());<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    } catch (Throwable t) {<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      // Call stop if error or process will stick around for ever since server<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      // puts up non-daemon threads.<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      this.rpcServices.stop();<a name="line.851"></a>
-<span class="sourceLineNo">852</span>      abort("Initialization of RS failed.  Hence aborting RS.", t);<a name="line.852"></a>
-<span class="sourceLineNo">853</span>    }<a name="line.853"></a>
-<span class="sourceLineNo">854</span>  }<a name="line.854"></a>
-<span class="sourceLineNo">855</span><a name="line.855"></a>
-<span class="sourceLineNo">856</span>  /**<a name="line.856"></a>
-<span class="sourceLineNo">857</span>   * Bring up connection to zk ensemble and then wait until a master for this cluster and then after<a name="line.857"></a>
-<span class="sourceLineNo">858</span>   * that, wait until cluster 'up' flag has been set. This is the order in which master does things.<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * &lt;p&gt;<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * Finally open long-living server short-circuit connection.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   */<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE",<a name="line.862"></a>
-<span class="sourceLineNo">863</span>    justification="cluster Id znode read would give us correct response")<a name="line.863"></a>
-<span class="sourceLineNo">864</span>  private void initializeZooKeeper() throws IOException, InterruptedException {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>    // Nothing to do in here if no Master in the mix.<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    if (this.masterless) {<a name="line.866"></a>
-<span class="sourceLineNo">867</span>      return;<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    }<a name="line.868"></a>
-<span class="sourceLineNo">869</span><a name="line.869"></a>
-<span class="sourceLineNo">870</span>    // Create the master address tracker, register with zk, and start it.  Then<a name="line.870"></a>
-<span class="sourceLineNo">871</span>    // block until a master is available.  No point in starting up if no master<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    // running.<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    blockAndCheckIfStopped(this.masterAddressTracker);<a name="line.873"></a>
-<span class="sourceLineNo">874</span><a name="line.874"></a>
-<span class="sourceLineNo">875</span>    // Wait on cluster being up.  Master will set this flag up in zookeeper<a name="line.875"></a>
-<span class="sourceLineNo">876</span>    // when ready.<a name="line.876"></a>
-<span class="sourceLineNo">877</span>    blockAndCheckIfStopped(this.clusterStatusTracker);<a name="line.877"></a>
-<span class="sourceLineNo">878</span><a name="line.878"></a>
-<span class="sourceLineNo">879</span>    // If we are HMaster then the cluster id should have already been set.<a name="line.879"></a>
-<span class="sourceLineNo">880</span>    if (clusterId == null) {<a name="line.880"></a>
-<span class="sourceLineNo">881</span>      // Retrieve clusterId<a name="line.881"></a>
-<span class="sourceLineNo">882</span>      // Since cluster status is now up<a name="line.882"></a>
-<span class="sourceLineNo">883</span>      // ID should have already been set by HMaster<a name="line.883"></a>
-<span class="sourceLineNo">884</span>      try {<a name="line.884"></a>
-<span class="sourceLineNo">885</span>        clusterId = ZKClusterId.readClusterIdZNode(this.zooKeeper);<a name="line.885"></a>
-<span class="sourceLineNo">886</span>        if (clusterId == null) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>          this.abort("Cluster ID has not been set");<a name="line.887"></a>
-<span class="sourceLineNo">888</span>        }<a name="line.888"></a>
-<span class="sourceLineNo">889</span>        LOG.info("ClusterId : " + clusterId);<a name="line.889"></a>
-<span class="sourceLineNo">890</span>      } catch (KeeperException e) {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>        this.abort("Failed to retrieve Cluster ID", e);<a name="line.891"></a>
-<span class="sourceLineNo">892</span>      }<a name="line.892"></a>
-<span class="sourceLineNo">893</span>    }<a name="line.893"></a>
-<span class="sourceLineNo">894</span><a name="line.894"></a>
-<span class="sourceLineNo">895</span>    waitForMasterActive();<a name="line.895"></a>
-<span class="sourceLineNo">896</span>    if (isStopped() || isAborted()) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      return; // No need for further initialization<a name="line.897"></a>
-<span class="sourceLineNo">898</span>    }<a name="line.898"></a>
-<span class="sourceLineNo">899</span><a name="line.899"></a>
-<span class="sourceLineNo">900</span>    // watch for snapshots and other procedures<a name="line.900"></a>
-<span class="sourceLineNo">901</span>    try {<a name="line.901"></a>
-<span class="sourceLineNo">902</span>      rspmHost = new RegionServerProcedureManagerHost();<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      rspmHost.loadProcedures(conf);<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      rspmHost.initialize(this);<a name="line.904"></a>
-<span class="sourceLineNo">905</span>    } catch (KeeperException e) {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>      this.abort("Failed to reach coordination cluster when creating procedure handler.", e);<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><a name="line.909"></a>
-<span class="sourceLineNo">910</span>  /**<a name="line.910"></a>
-<span class="sourceLineNo">911</span>   * Utilty method to wait indefinitely on a znode availability while checking<a name="line.911"></a>
-<span class="sourceLineNo">912</span>   * if the region server is shut down<a name="line.912"></a>
-<span class="sourceLineNo">913</span>   * @param tracker znode tracker to use<a name="line.913"></a>
-<span class="sourceLineNo">914</span>   * @throws IOException any IO exception, plus if the RS is stopped<a name="line.914"></a>
-<span class="sourceLineNo">915</span>   * @throws InterruptedException<a name="line.915"></a>
-<span class="sourceLineNo">916</span>   */<a name="line.916"></a>
-<span class="sourceLineNo">917</span>  private void blockAndCheckIfStopped(ZKNodeTracker tracker)<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      throws IOException, InterruptedException {<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    while (tracker.blockUntilAvailable(this.msgInterval, false) == null) {<a name="line.919"></a>
-<span class="sourceLineNo">920</span>      if (this.stopped) {<a name="line.920"></a>
-<span class="sourceLineNo">921</span>        throw new IOException("Received the shutdown message while waiting.");<a name="line.921"></a>
-<span class="sourceLineNo">922</span>      }<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    }<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  }<a name="line.924"></a>
-<span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>  /**<a name="line.926"></a>
-<span class="sourceLineNo">927</span>   * @return True if the cluster is up.<a name="line.927"></a>
-<span class="sourceLineNo">928</span>   */<a name="line.928"></a>
-<span class="sourceLineNo">929</span>  @Override<a name="line.929"></a>
-<span class="sourceLineNo">930</span>  public boolean isClusterUp() {<a name="line.930"></a>
-<span class="sourceLineNo">931</span>    return this.masterless ||<a name="line.931"></a>
-<span class="sourceLineNo">932</span>        (this.clusterStatusTracker != null &amp;&amp; this.clusterStatusTracker.isClusterUp());<a name="line.932"></a>
-<span class="sourceLineNo">933</span>  }<a name="line.933"></a>
-<span class="sourceLineNo">934</span><a name="line.934"></a>
-<span class="sourceLineNo">935</span>  /**<a name="line.935"></a>
-<span class="sourceLineNo">936</span>   * The HRegionServer sticks in this loop until closed.<a name="line.936"></a>
-<span class="sourceLineNo">937</span>   */<a name="line.937"></a>
-<span class="sourceLineNo">938</span>  @Override<a name="line.938"></a>
-<span class="sourceLineNo">939</span>  public void run() {<a name="line.939"></a>
-<span class="sourceLineNo">940</span>    try {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>      // Do pre-registration initializations; zookeeper, lease threads, etc.<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      preRegistrationInitialization();<a name="line.942"></a>
-<span class="sourceLineNo">943</span>    } catch (Throwable e) {<a name="line.943"></a>
-<span class="sourceLineNo">944</span>      abort("Fatal exception during initialization", e);<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    }<a name="line.945"></a>
-<span class="sourceLineNo">946</span><a name="line.946"></a>
-<span class="sourceLineNo">947</span>    try {<a name="line.947"></a>
-<span class="sourceLineNo">948</span>      if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.948"></a>
-<span class="sourceLineNo">949</span>        ShutdownHook.install(conf, fs, this, Thread.currentThread());<a name="line.949"></a>
-<span class="sourceLineNo">950</span>        // Initialize the RegionServerCoprocessorHost now that our ephemeral<a name="line.950"></a>
-<span class="sourceLineNo">951</span>        // node was created, in case any coprocessors want to use ZooKeeper<a name="line.951"></a>
-<span class="sourceLineNo">952</span>        this.rsHost = new RegionServerCoprocessorHost(this, this.conf);<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      }<a name="line.953"></a>
-<span class="sourceLineNo">954</span><a name="line.954"></a>
-<span class="sourceLineNo">955</span>      // Try and register with the Master; tell it we are here.  Break if server is stopped or the<a name="line.955"></a>
-<span class="sourceLineNo">956</span>      // clusterup flag is down or hdfs went wacky. Once registered successfully, go ahead and start<a name="line.956"></a>
-<span class="sourceLineNo">957</span>      // up all Services. Use RetryCounter to get backoff in case Master is struggling to come up.<a name="line.957"></a>
-<span class="sourceLineNo">958</span>      LOG.debug("About to register with Master.");<a name="line.958"></a>
-<span class="sourceLineNo">959</span>      RetryCounterFactory rcf = new RetryCounterFactory(Integer.MAX_VALUE,<a name="line.959"></a>
-<span class="sourceLineNo">960</span>          this.sleeper.getPeriod(), 1000 * 60 * 5);<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      RetryCounter rc = rcf.create();<a name="line.961"></a>
-<span class="sourceLineNo">962</span>      while (keepLooping()) {<a name="line.962"></a>
-<span class="sourceLineNo">963</span>        RegionServerStartupResponse w = reportForDuty();<a name="line.963"></a>
-<span class="sourceLineNo">964</span>        if (w == null) {<a name="line.964"></a>
-<span class="sourceLineNo">965</span>          long sleepTime = rc.getBackoffTimeAndIncrementAttempts();<a name="line.965"></a>
-<span class="sourceLineNo">966</span>          LOG.warn("reportForDuty failed; sleeping {} ms and then retrying.", sleepTime);<a name="line.966"></a>
-<span class="sourceLineNo">967</span>          this.sleeper.sleep(sleepTime);<a name="line.967"></a>
-<span class="sourceLineNo">968</span>        } else {<a name="line.968"></a>
-<span class="sourceLineNo">969</span>          handleReportForDutyResponse(w);<a name="line.969"></a>
-<span class="sourceLineNo">970</span>          break;<a name="line.970"></a>
-<span class="sourceLineNo">971</span>        }<a name="line.971"></a>
-<span class="sourceLineNo">972</span>      }<a name="line.972"></a>
-<span class="sourceLineNo">973</span><a name="line.973"></a>
-<span class="sourceLineNo">974</span>      if (!isStopped() &amp;&amp; isHealthy()) {<a name="line.974"></a>
-<span class="sourceLineNo">975</span>        // start the snapshot handler and other procedure handlers,<a name="line.975"></a>
-<span class="sourceLineNo">976</span>        // since the server is ready to run<a name="line.976"></a>
-<span class="sourceLineNo">977</span>        if (this.rspmHost != null) {<a name="line.977"></a>
-<span class="sourceLineNo">978</span>          this.rspmHost.start();<a name="line.978"></a>
-<span class="sourceLineNo">979</span>        }<a name="line.979"></a>
-<span class="sourceLineNo">980</span>        // Start the Quota Manager<a name="line.980"></a>
-<span class="sourceLineNo">981</span>        if (this.rsQuotaManager != null) {<a name="line.981"></a>
-<span class="sourceLineNo">982</span>          rsQuotaManager.start(getRpcServer().getScheduler());<a name="line.982"></a>
-<span class="sourceLineNo">983</span>        }<a name="line.983"></a>
-<span class="sourceLineNo">984</span>        if (this.rsSpaceQuotaManager != null) {<a name="line.984"></a>
-<span class="sourceLineNo">985</span>          this.rsSpaceQuotaManager.start();<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        }<a name="line.986"></a>
-<span class="sourceLineNo">987</span>      }<a name="line.987"></a>
-<span class="sourceLineNo">988</span><a name="line.988"></a>
-<span class="sourceLineNo">989</span>      // We registered with the Master.  Go into run mode.<a name="line.989"></a>
-<span class="sourceLineNo">990</span>      long lastMsg = System.currentTimeMillis();<a name="line.990"></a>
-<span class="sourceLineNo">991</span>      long oldRequestCount = -1;<a name="line.991"></a>
-<span class="sourceLineNo">992</span>      // The main run loop.<a name="line.992"></a>
-<span class="sourceLineNo">993</span>      while (!isStopped() &amp;&amp; isHealthy()) {<a name="line.993"></a>
-<span class="sourceLineNo">994</span>        if (!isClusterUp()) {<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          if (isOnlineRegionsEmpty()) {<a name="line.995"></a>
-<span class="sourceLineNo">996</span>            stop("Exiting; cluster shutdown set and not carrying any regions");<a name="line.996"></a>
-<span class="sourceLineNo">997</span>          } else if (!this.stopping) {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>            this.stopping = true;<a name="line.998"></a>
-<span class="sourceLineNo">999</span>            LOG.info("Closing user regions");<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>            closeUserRegions(this.abortRequested);<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>          } else if (this.stopping) {<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>            boolean allUserRegionsOffline = areAllUserRegionsOffline();<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>            if (allUserRegionsOffline) {<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>              // Set stopped if no more write requests tp meta tables<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>              // since last time we went around the loop.  Any open<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>              // meta regions will be closed on our way out.<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>              if (oldRequestCount == getWriteRequestCount()) {<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>                stop("Stopped; only catalog regions remaining online");<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>                break;<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>              }<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>              oldRequestCount = getWriteRequestCount();<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>            } else {<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>              // Make sure all regions have been closed -- some regions may<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>              // have not got it because we were splitting at the time of<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>              // the call to closeUserRegions.<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>              closeUserRegions(this.abortRequested);<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>            }<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>            LOG.debug("Waiting on " + getOnlineRegionsAsPrintableString());<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>          }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>        }<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>        long now = System.currentTimeMillis();<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>        if ((now - lastMsg) &gt;= msgInterval) {<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>          tryRegionServerReport(lastMsg, now);<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>          lastMsg = System.currentTimeMillis();<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>        }<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>        if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>          this.sleeper.sleep();<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>        }<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>      } // for<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    } catch (Throwable t) {<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      if (!rpcServices.checkOOME(t)) {<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>        String prefix = t instanceof YouAreDeadException? "": "Unhandled: ";<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        abort(prefix + t.getMessage(), t);<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      }<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>    }<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span><a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>    if (abortRequested) {<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>      Timer abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      TimerTask abortTimeoutTask = null;<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>      try {<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>        abortTimeoutTask =<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>            Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>                .asSubclass(TimerTask.class).getDeclaredConstructor().newInstance();<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>      } catch (Exception e) {<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>      }<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>      if (abortTimeoutTask != null) {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>      }<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span><a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    if (this.leases != null) {<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>      this.leases.closeAfterLeasesExpire();<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>    }<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    if (this.splitLogWorker != null) {<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>      splitLogWorker.stop();<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    }<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    if (this.infoServer != null) {<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      LOG.info("Stopping infoServer");<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      try {<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>        this.infoServer.stop();<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>      } catch (Exception e) {<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>        LOG.error("Failed to stop infoServer", e);<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>      }<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    }<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    // Send cache a shutdown.<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    if (cacheConfig != null &amp;&amp; cacheConfig.isBlockCacheEnabled()) {<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>      cacheConfig.getBlockCache().shutdown();<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>    }<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    mobCacheConfig.getMobFileCache().shutdown();<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span><a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    if (movedRegionsCleaner != null) {<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>      movedRegionsCleaner.stop("Region Server stopping");<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>    // Send interrupts to wake up threads if sleeping so they notice shutdown.<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    // TODO: Should we check they are alive? If OOME could have exited already<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>    if (this.hMemManager != null) this.hMemManager.stop();<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    if (this.cacheFlusher != null) this.cacheFlusher.interruptIfNecessary();<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    if (this.compactSplitThread != null) this.compactSplitThread.interruptIfNecessary();<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>    sendShutdownInterrupt();<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span><a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>    // Stop the snapshot and other procedure handlers, forcefully killing all running tasks<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>    if (rspmHost != null) {<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>      rspmHost.stop(this.abortRequested || this.killed);<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    }<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span><a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    if (this.killed) {<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>      // Just skip out w/o closing regions.  Used when testing.<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    } else if (abortRequested) {<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>      if (this.fsOk) {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>        closeUserRegions(abortRequested); // Don't leave any open file handles<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      }<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>      LOG.info("aborting server " + this.serverName);<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    } else {<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      closeUserRegions(abortRequested);<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>      LOG.info("stopping server " + this.serverName);<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>    // so callers waiting for meta without timeout can stop<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    if (this.metaTableLocator != null) this.metaTableLocator.stop();<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    if (this.clusterConnection != null &amp;&amp; !clusterConnection.isClosed()) {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>      try {<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>        this.clusterConnection.close();<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>      } catch (IOException e) {<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>        // Although the {@link Closeable} interface throws an {@link<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>        // IOException}, in reality, the implementation would never do that.<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>        LOG.warn("Attempt to close server's short circuit ClusterConnection failed.", e);<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      }<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    }<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span><a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>    // Closing the compactSplit thread before closing meta regions<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>    if (!this.killed &amp;&amp; containsMetaTableRegions()) {<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>      if (!abortRequested || this.fsOk) {<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>        if (this.compactSplitThread != null) {<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>          this.compactSplitThread.join();<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>          this.compactSplitThread = null;<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>        }<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>        closeMetaTableRegions(abortRequested);<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>      }<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>    }<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span><a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    if (!this.killed &amp;&amp; this.fsOk) {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>      waitOnAllRegionsToClose(abortRequested);<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>      LOG.info("stopping server " + this.serverName + "; all regions closed.");<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>    // Stop the quota manager<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    if (rsQuotaManager != null) {<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>      rsQuotaManager.stop();<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    }<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    if (rsSpaceQuotaManager != null) {<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>      rsSpaceQuotaManager.stop();<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>      rsSpaceQuotaManager = null;<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>    //fsOk flag may be changed when closing regions throws exception.<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>    if (this.fsOk) {<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>      shutdownWAL(!abortRequested);<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>    // Make sure the proxy is down.<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    if (this.rssStub != null) {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>      this.rssStub = null;<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>    }<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    if (this.lockStub != null) {<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>      this.lockStub = null;<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>    }<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    if (this.rpcClient != null) {<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>      this.rpcClient.close();<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    }<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>    if (this.leases != null) {<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>      this.leases.close();<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>    }<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>    if (this.pauseMonitor != null) {<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>      this.pauseMonitor.stop();<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    }<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span><a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    if (!killed) {<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      stopServiceThreads();<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>    if (this.rpcServices != null) {<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      this.rpcServices.stop();<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>    try {<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>      deleteMyEphemeralNode();<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    } catch (KeeperException.NoNodeException nn) {<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>    } catch (KeeperException e) {<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>      LOG.warn("Failed deleting my ephemeral node", e);<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>    }<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    // We may have failed to delete the znode at the previous step, but<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>    //  we delete the file anyway: a second attempt to delete the znode is likely to fail again.<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    ZNodeClearer.deleteMyEphemeralNodeOnDisk();<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span><a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    if (this.zooKeeper != null) {<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>      this.zooKeeper.close();<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    }<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>    this.shutDown = true;<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>    LOG.info("Exiting; stopping=" + this.serverName + "; zookeeper connection closed.");<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>  private boolean containsMetaTableRegions() {<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    return onlineRegions.containsKey(RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedName());<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>  private boolean areAllUserRegionsOffline() {<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>    if (getNumberOfOnlineRegions() &gt; 2) return false;<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>    boolean allUserRegionsOffline = true;<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>      if (!e.getValue().getRegionInfo().isMetaRegion()) {<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>        allUserRegionsOffline = false;<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>        break;<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      }<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>    }<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>    return allUserRegionsOffline;<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>  /**<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>   * @return Current write count for all online regions.<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>   */<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>  private long getWriteRequestCount() {<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>    long writeCount = 0;<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>      writeCount += e.getValue().getWriteRequestsCount();<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>    }<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>    return writeCount;<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>  @VisibleForTesting<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>  protected void tryRegionServerReport(long reportStartTime, long reportEndTime)<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>      throws IOException {<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>    if (rss == null) {<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>      // the current server could be stopping.<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>      return;<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>    }<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>    ClusterStatusProtos.ServerLoad sl = buildServerLoad(reportStartTime, reportEndTime);<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>    try {<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>      RegionServerReportRequest.Builder request = RegionServerReportRequest.newBuilder();<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>      request.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>      request.setLoad(sl);<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>      rss.regionServerReport(null, request.build());<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>    } catch (ServiceException se) {<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>        // This will be caught and handled as a fatal error in run()<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>        throw ioe;<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>      }<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>      if (rssStub == rss) {<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>        rssStub = null;<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>      }<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>      // Method blocks until new master is found or we are stopped<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>      createRegionServerStatusStub(true);<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>    }<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>  }<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span><a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>  /**<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>   *<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>   * @param regionSizeStore The store containing region sizes<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>   */<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>    if (rss == null) {<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>      // the current server could be stopping.<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>      return true;<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    }<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>    try {<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>    } catch (ServiceException se) {<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>            + " This will be retried.", ioe);<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>        return true;<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>      }<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      if (rssStub == rss) {<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>        rssStub = null;<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>      }<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>      createRegionServerStatusStub(true);<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>            return false;<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>          }<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>        }<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>      }<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>    }<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>    return true;<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>  }<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span><a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>  /**<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>   *<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>   * @param rss The stub to send to the Master<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>   * @param regionSizeStore The store containing region sizes<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>   */<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>  void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>    RegionSpaceUseReportRequest request =<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>    // Record the number of size reports sent<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>    if (metricsRegionServer != null) {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>    }<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>  }<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span><a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>  /**<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>   *<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>   * @param regionSizes The size in bytes of regions<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>   * @return The corresponding protocol buffer message.<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>   */<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>    }<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>    return request.build();<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>  }<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span><a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>  /**<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>   * protobuf message.<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>   *<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>   * @param regionInfo The RegionInfo<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>   * @return The protocol buffer<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>   */<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>    return RegionSpaceUse.newBuilder()<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>        .build();<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>  }<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span><a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>  ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>      throws IOException {<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>    // the wrapper to compute those numbers in one place.<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    // history.<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>    long usedMemory = -1L;<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>    long maxMemory = -1L;<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>    if (usage != null) {<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>      usedMemory = usage.getUsed();<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>      maxMemory = usage.getMax();<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>    }<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span><a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="li

<TRUNCATED>

[06/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
index bf81ebb..a170ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
@@ -606,3246 +606,3245 @@
 <span class="sourceLineNo">598</span><a name="line.598"></a>
 <span class="sourceLineNo">599</span>      regionServerAccounting = new RegionServerAccounting(conf);<a name="line.599"></a>
 <span class="sourceLineNo">600</span>      boolean isMasterNotCarryTable =<a name="line.600"></a>
-<span class="sourceLineNo">601</span>          this instanceof HMaster &amp;&amp; !LoadBalancer.isTablesOnMaster(conf) &amp;&amp; !LoadBalancer<a name="line.601"></a>
-<span class="sourceLineNo">602</span>              .isSystemTablesOnlyOnMaster(conf);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      cacheConfig = new CacheConfig(conf, !isMasterNotCarryTable);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      mobCacheConfig = new MobCacheConfig(conf, !isMasterNotCarryTable);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      uncaughtExceptionHandler = new UncaughtExceptionHandler() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>        @Override<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        public void uncaughtException(Thread t, Throwable e) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>          abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        }<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      };<a name="line.610"></a>
-<span class="sourceLineNo">611</span><a name="line.611"></a>
-<span class="sourceLineNo">612</span>      initializeFileSystem();<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      spanReceiverHost = SpanReceiverHost.getInstance(getConfiguration());<a name="line.613"></a>
-<span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>      this.configurationManager = new ConfigurationManager();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      setupWindows(getConfiguration(), getConfigurationManager());<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>      // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>        // Open connection to zookeeper and set primary watcher<a name="line.620"></a>
-<span class="sourceLineNo">621</span>        zooKeeper = new ZKWatcher(conf, getProcessName() + ":" +<a name="line.621"></a>
-<span class="sourceLineNo">622</span>          rpcServices.isa.getPort(), this, canCreateBaseZNode());<a name="line.622"></a>
-<span class="sourceLineNo">623</span>        // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.623"></a>
-<span class="sourceLineNo">624</span>        if (!this.masterless) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>          this.csm = new ZkCoordinatedStateManager(this);<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span>          masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.627"></a>
-<span class="sourceLineNo">628</span>          masterAddressTracker.start();<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>          clusterStatusTracker = new ClusterStatusTracker(zooKeeper, this);<a name="line.630"></a>
-<span class="sourceLineNo">631</span>          clusterStatusTracker.start();<a name="line.631"></a>
-<span class="sourceLineNo">632</span>        } else {<a name="line.632"></a>
-<span class="sourceLineNo">633</span>          masterAddressTracker = null;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>          clusterStatusTracker = null;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>        }<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      } else {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>        zooKeeper = null;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        masterAddressTracker = null;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        clusterStatusTracker = null;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      }<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      this.rpcServices.start(zooKeeper);<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      // This violates 'no starting stuff in Constructor' but Master depends on the below chore<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      // and executor being created and takes a different startup route. Lots of overlap between HRS<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      // and M (An M IS A HRS now). Need to refactor so less duplication between M and its super<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      // Master expects Constructor to put up web servers. Ugh.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      // class HRS. TODO.<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      this.choreService = new ChoreService(getName(), true);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      this.executorService = new ExecutorService(getName());<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      putUpWebUI();<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    } catch (Throwable t) {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      // cause of failed startup is lost.<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      LOG.error("Failed construction RegionServer", t);<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      throw t;<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>  }<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span>  // HMaster should override this method to load the specific config for master<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    String hostname = conf.get(RS_HOSTNAME_KEY);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    if (conf.getBoolean(RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.662"></a>
-<span class="sourceLineNo">663</span>        String msg = RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and " + RS_HOSTNAME_KEY +<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          " are mutually exclusive. Do not set " + RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY +<a name="line.664"></a>
-<span class="sourceLineNo">665</span>          " to true while " + RS_HOSTNAME_KEY + " is used";<a name="line.665"></a>
-<span class="sourceLineNo">666</span>        throw new IOException(msg);<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      } else {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        return rpcServices.isa.getHostName();<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      }<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    } else {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>      return hostname;<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    }<a name="line.672"></a>
-<span class="sourceLineNo">673</span>  }<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span>  /**<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   * If running on Windows, do windows-specific setup.<a name="line.676"></a>
-<span class="sourceLineNo">677</span>   */<a name="line.677"></a>
-<span class="sourceLineNo">678</span>  private static void setupWindows(final Configuration conf, ConfigurationManager cm) {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    if (!SystemUtils.IS_OS_WINDOWS) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      Signal.handle(new Signal("HUP"), new SignalHandler() {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        @Override<a name="line.681"></a>
-<span class="sourceLineNo">682</span>        public void handle(Signal signal) {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          conf.reloadConfiguration();<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          cm.notifyAllObservers(conf);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>        }<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><a name="line.689"></a>
-<span class="sourceLineNo">690</span>  private static NettyEventLoopGroupConfig setupNetty(Configuration conf) {<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    // Initialize netty event loop group at start as we may use it for rpc server, rpc client &amp; WAL.<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    NettyEventLoopGroupConfig nelgc =<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      new NettyEventLoopGroupConfig(conf, "RS-EventLoopGroup");<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    NettyRpcClientConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    NettyAsyncFSWALConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    return nelgc;<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 void initializeFileSystem() throws IOException {<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    // Get fs instance used by this RS.  Do we use checksum verification in the hbase? If hbase<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    // checksum verification enabled, then automatically switch off hdfs checksum verification.<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    boolean useHBaseChecksum = conf.getBoolean(HConstants.HBASE_CHECKSUM_VERIFICATION, true);<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    FSUtils.setFsDefault(this.conf, FSUtils.getWALRootDir(this.conf));<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    this.walFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    this.walRootDir = FSUtils.getWALRootDir(this.conf);<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    // Set 'fs.defaultFS' to match the filesystem on hbase.rootdir else<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    // underlying hadoop hdfs accessors will be going against wrong filesystem<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    // (unless all is set to defaults).<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    FSUtils.setFsDefault(this.conf, FSUtils.getRootDir(this.conf));<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    this.fs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    this.rootDir = FSUtils.getRootDir(this.conf);<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    this.tableDescriptors = getFsTableDescriptors();<a name="line.712"></a>
-<span class="sourceLineNo">713</span>  }<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span>  protected TableDescriptors getFsTableDescriptors() throws IOException {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    return new FSTableDescriptors(this.conf,<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      this.fs, this.rootDir, !canUpdateTableDescriptor(), false, getMetaTableObserver());<a name="line.717"></a>
-<span class="sourceLineNo">718</span>  }<a name="line.718"></a>
-<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>  protected Function&lt;TableDescriptorBuilder, TableDescriptorBuilder&gt; getMetaTableObserver() {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    return null;<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  }<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    user.login("hbase.regionserver.keytab.file",<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      "hbase.regionserver.kerberos.principal", host);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>  }<a name="line.727"></a>
+<span class="sourceLineNo">601</span>          this instanceof HMaster &amp;&amp; !LoadBalancer.isTablesOnMaster(conf);<a name="line.601"></a>
+<span class="sourceLineNo">602</span>      cacheConfig = new CacheConfig(conf, !isMasterNotCarryTable);<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      mobCacheConfig = new MobCacheConfig(conf, !isMasterNotCarryTable);<a name="line.603"></a>
+<span class="sourceLineNo">604</span>      uncaughtExceptionHandler = new UncaughtExceptionHandler() {<a name="line.604"></a>
+<span class="sourceLineNo">605</span>        @Override<a name="line.605"></a>
+<span class="sourceLineNo">606</span>        public void uncaughtException(Thread t, Throwable e) {<a name="line.606"></a>
+<span class="sourceLineNo">607</span>          abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.607"></a>
+<span class="sourceLineNo">608</span>        }<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      };<a name="line.609"></a>
+<span class="sourceLineNo">610</span><a name="line.610"></a>
+<span class="sourceLineNo">611</span>      initializeFileSystem();<a name="line.611"></a>
+<span class="sourceLineNo">612</span>      spanReceiverHost = SpanReceiverHost.getInstance(getConfiguration());<a name="line.612"></a>
+<span class="sourceLineNo">613</span><a name="line.613"></a>
+<span class="sourceLineNo">614</span>      this.configurationManager = new ConfigurationManager();<a name="line.614"></a>
+<span class="sourceLineNo">615</span>      setupWindows(getConfiguration(), getConfigurationManager());<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span>      // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.617"></a>
+<span class="sourceLineNo">618</span>      if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>        // Open connection to zookeeper and set primary watcher<a name="line.619"></a>
+<span class="sourceLineNo">620</span>        zooKeeper = new ZKWatcher(conf, getProcessName() + ":" +<a name="line.620"></a>
+<span class="sourceLineNo">621</span>          rpcServices.isa.getPort(), this, canCreateBaseZNode());<a name="line.621"></a>
+<span class="sourceLineNo">622</span>        // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.622"></a>
+<span class="sourceLineNo">623</span>        if (!this.masterless) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>          this.csm = new ZkCoordinatedStateManager(this);<a name="line.624"></a>
+<span class="sourceLineNo">625</span><a name="line.625"></a>
+<span class="sourceLineNo">626</span>          masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.626"></a>
+<span class="sourceLineNo">627</span>          masterAddressTracker.start();<a name="line.627"></a>
+<span class="sourceLineNo">628</span><a name="line.628"></a>
+<span class="sourceLineNo">629</span>          clusterStatusTracker = new ClusterStatusTracker(zooKeeper, this);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>          clusterStatusTracker.start();<a name="line.630"></a>
+<span class="sourceLineNo">631</span>        } else {<a name="line.631"></a>
+<span class="sourceLineNo">632</span>          masterAddressTracker = null;<a name="line.632"></a>
+<span class="sourceLineNo">633</span>          clusterStatusTracker = null;<a name="line.633"></a>
+<span class="sourceLineNo">634</span>        }<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      } else {<a name="line.635"></a>
+<span class="sourceLineNo">636</span>        zooKeeper = null;<a name="line.636"></a>
+<span class="sourceLineNo">637</span>        masterAddressTracker = null;<a name="line.637"></a>
+<span class="sourceLineNo">638</span>        clusterStatusTracker = null;<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      }<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      this.rpcServices.start(zooKeeper);<a name="line.640"></a>
+<span class="sourceLineNo">641</span>      // This violates 'no starting stuff in Constructor' but Master depends on the below chore<a name="line.641"></a>
+<span class="sourceLineNo">642</span>      // and executor being created and takes a different startup route. Lots of overlap between HRS<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      // and M (An M IS A HRS now). Need to refactor so less duplication between M and its super<a name="line.643"></a>
+<span class="sourceLineNo">644</span>      // Master expects Constructor to put up web servers. Ugh.<a name="line.644"></a>
+<span class="sourceLineNo">645</span>      // class HRS. TODO.<a name="line.645"></a>
+<span class="sourceLineNo">646</span>      this.choreService = new ChoreService(getName(), true);<a name="line.646"></a>
+<span class="sourceLineNo">647</span>      this.executorService = new ExecutorService(getName());<a name="line.647"></a>
+<span class="sourceLineNo">648</span>      putUpWebUI();<a name="line.648"></a>
+<span class="sourceLineNo">649</span>    } catch (Throwable t) {<a name="line.649"></a>
+<span class="sourceLineNo">650</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      // cause of failed startup is lost.<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      LOG.error("Failed construction RegionServer", t);<a name="line.652"></a>
+<span class="sourceLineNo">653</span>      throw t;<a name="line.653"></a>
+<span class="sourceLineNo">654</span>    }<a name="line.654"></a>
+<span class="sourceLineNo">655</span>  }<a name="line.655"></a>
+<span class="sourceLineNo">656</span><a name="line.656"></a>
+<span class="sourceLineNo">657</span>  // HMaster should override this method to load the specific config for master<a name="line.657"></a>
+<span class="sourceLineNo">658</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.658"></a>
+<span class="sourceLineNo">659</span>    String hostname = conf.get(RS_HOSTNAME_KEY);<a name="line.659"></a>
+<span class="sourceLineNo">660</span>    if (conf.getBoolean(RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>        String msg = RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and " + RS_HOSTNAME_KEY +<a name="line.662"></a>
+<span class="sourceLineNo">663</span>          " are mutually exclusive. Do not set " + RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY +<a name="line.663"></a>
+<span class="sourceLineNo">664</span>          " to true while " + RS_HOSTNAME_KEY + " is used";<a name="line.664"></a>
+<span class="sourceLineNo">665</span>        throw new IOException(msg);<a name="line.665"></a>
+<span class="sourceLineNo">666</span>      } else {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>        return rpcServices.isa.getHostName();<a name="line.667"></a>
+<span class="sourceLineNo">668</span>      }<a name="line.668"></a>
+<span class="sourceLineNo">669</span>    } else {<a name="line.669"></a>
+<span class="sourceLineNo">670</span>      return hostname;<a name="line.670"></a>
+<span class="sourceLineNo">671</span>    }<a name="line.671"></a>
+<span class="sourceLineNo">672</span>  }<a name="line.672"></a>
+<span class="sourceLineNo">673</span><a name="line.673"></a>
+<span class="sourceLineNo">674</span>  /**<a name="line.674"></a>
+<span class="sourceLineNo">675</span>   * If running on Windows, do windows-specific setup.<a name="line.675"></a>
+<span class="sourceLineNo">676</span>   */<a name="line.676"></a>
+<span class="sourceLineNo">677</span>  private static void setupWindows(final Configuration conf, ConfigurationManager cm) {<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    if (!SystemUtils.IS_OS_WINDOWS) {<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      Signal.handle(new Signal("HUP"), new SignalHandler() {<a name="line.679"></a>
+<span class="sourceLineNo">680</span>        @Override<a name="line.680"></a>
+<span class="sourceLineNo">681</span>        public void handle(Signal signal) {<a name="line.681"></a>
+<span class="sourceLineNo">682</span>          conf.reloadConfiguration();<a name="line.682"></a>
+<span class="sourceLineNo">683</span>          cm.notifyAllObservers(conf);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>        }<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      });<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 static NettyEventLoopGroupConfig setupNetty(Configuration conf) {<a name="line.689"></a>
+<span class="sourceLineNo">690</span>    // Initialize netty event loop group at start as we may use it for rpc server, rpc client &amp; WAL.<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    NettyEventLoopGroupConfig nelgc =<a name="line.691"></a>
+<span class="sourceLineNo">692</span>      new NettyEventLoopGroupConfig(conf, "RS-EventLoopGroup");<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    NettyRpcClientConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    NettyAsyncFSWALConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    return nelgc;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>  }<a name="line.696"></a>
+<span class="sourceLineNo">697</span><a name="line.697"></a>
+<span class="sourceLineNo">698</span>  private void initializeFileSystem() throws IOException {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>    // Get fs instance used by this RS.  Do we use checksum verification in the hbase? If hbase<a name="line.699"></a>
+<span class="sourceLineNo">700</span>    // checksum verification enabled, then automatically switch off hdfs checksum verification.<a name="line.700"></a>
+<span class="sourceLineNo">701</span>    boolean useHBaseChecksum = conf.getBoolean(HConstants.HBASE_CHECKSUM_VERIFICATION, true);<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    FSUtils.setFsDefault(this.conf, FSUtils.getWALRootDir(this.conf));<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    this.walFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>    this.walRootDir = FSUtils.getWALRootDir(this.conf);<a name="line.704"></a>
+<span class="sourceLineNo">705</span>    // Set 'fs.defaultFS' to match the filesystem on hbase.rootdir else<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    // underlying hadoop hdfs accessors will be going against wrong filesystem<a name="line.706"></a>
+<span class="sourceLineNo">707</span>    // (unless all is set to defaults).<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    FSUtils.setFsDefault(this.conf, FSUtils.getRootDir(this.conf));<a name="line.708"></a>
+<span class="sourceLineNo">709</span>    this.fs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.709"></a>
+<span class="sourceLineNo">710</span>    this.rootDir = FSUtils.getRootDir(this.conf);<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    this.tableDescriptors = getFsTableDescriptors();<a name="line.711"></a>
+<span class="sourceLineNo">712</span>  }<a name="line.712"></a>
+<span class="sourceLineNo">713</span><a name="line.713"></a>
+<span class="sourceLineNo">714</span>  protected TableDescriptors getFsTableDescriptors() throws IOException {<a name="line.714"></a>
+<span class="sourceLineNo">715</span>    return new FSTableDescriptors(this.conf,<a name="line.715"></a>
+<span class="sourceLineNo">716</span>      this.fs, this.rootDir, !canUpdateTableDescriptor(), false, getMetaTableObserver());<a name="line.716"></a>
+<span class="sourceLineNo">717</span>  }<a name="line.717"></a>
+<span class="sourceLineNo">718</span><a name="line.718"></a>
+<span class="sourceLineNo">719</span>  protected Function&lt;TableDescriptorBuilder, TableDescriptorBuilder&gt; getMetaTableObserver() {<a name="line.719"></a>
+<span class="sourceLineNo">720</span>    return null;<a name="line.720"></a>
+<span class="sourceLineNo">721</span>  }<a name="line.721"></a>
+<span class="sourceLineNo">722</span><a name="line.722"></a>
+<span class="sourceLineNo">723</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.723"></a>
+<span class="sourceLineNo">724</span>    user.login("hbase.regionserver.keytab.file",<a name="line.724"></a>
+<span class="sourceLineNo">725</span>      "hbase.regionserver.kerberos.principal", host);<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><a name="line.729"></a>
-<span class="sourceLineNo">730</span>  /**<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * Wait for an active Master.<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   * See override in Master superclass for how it is used.<a name="line.732"></a>
-<span class="sourceLineNo">733</span>   */<a name="line.733"></a>
-<span class="sourceLineNo">734</span>  protected void waitForMasterActive() {}<a name="line.734"></a>
-<span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>  protected String getProcessName() {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    return REGIONSERVER;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  protected boolean canCreateBaseZNode() {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    return this.masterless;<a name="line.741"></a>
-<span class="sourceLineNo">742</span>  }<a name="line.742"></a>
-<span class="sourceLineNo">743</span><a name="line.743"></a>
-<span class="sourceLineNo">744</span>  protected boolean canUpdateTableDescriptor() {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    return false;<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
-<span class="sourceLineNo">747</span><a name="line.747"></a>
-<span class="sourceLineNo">748</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    return new RSRpcServices(this);<a name="line.749"></a>
-<span class="sourceLineNo">750</span>  }<a name="line.750"></a>
-<span class="sourceLineNo">751</span><a name="line.751"></a>
-<span class="sourceLineNo">752</span>  protected void configureInfoServer() {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    infoServer.addServlet("rs-status", "/rs-status", RSStatusServlet.class);<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    infoServer.setAttribute(REGIONSERVER, this);<a name="line.754"></a>
-<span class="sourceLineNo">755</span>  }<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    return RSDumpServlet.class;<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>  @Override<a name="line.761"></a>
-<span class="sourceLineNo">762</span>  public boolean registerService(com.google.protobuf.Service instance) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    /*<a name="line.763"></a>
-<span class="sourceLineNo">764</span>     * No stacking of instances is allowed for a single executorService name<a name="line.764"></a>
-<span class="sourceLineNo">765</span>     */<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    com.google.protobuf.Descriptors.ServiceDescriptor serviceDesc =<a name="line.766"></a>
-<span class="sourceLineNo">767</span>        instance.getDescriptorForType();<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      LOG.error("Coprocessor executorService " + serviceName<a name="line.770"></a>
-<span class="sourceLineNo">771</span>          + " already registered, rejecting request from " + instance);<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      return false;<a name="line.772"></a>
-<span class="sourceLineNo">773</span>    }<a name="line.773"></a>
-<span class="sourceLineNo">774</span><a name="line.774"></a>
-<span class="sourceLineNo">775</span>    coprocessorServiceHandlers.put(serviceName, instance);<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    if (LOG.isDebugEnabled()) {<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      LOG.debug("Registered regionserver coprocessor executorService: executorService=" + serviceName);<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    }<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    return true;<a name="line.779"></a>
-<span class="sourceLineNo">780</span>  }<a name="line.780"></a>
-<span class="sourceLineNo">781</span><a name="line.781"></a>
-<span class="sourceLineNo">782</span>  /**<a name="line.782"></a>
-<span class="sourceLineNo">783</span>   * Create a 'smarter' Connection, one that is capable of by-passing RPC if the request is to<a name="line.783"></a>
-<span class="sourceLineNo">784</span>   * the local server; i.e. a short-circuit Connection. Safe to use going to local or remote<a name="line.784"></a>
-<span class="sourceLineNo">785</span>   * server. Create this instance in a method can be intercepted and mocked in tests.<a name="line.785"></a>
-<span class="sourceLineNo">786</span>   * @throws IOException<a name="line.786"></a>
-<span class="sourceLineNo">787</span>   */<a name="line.787"></a>
-<span class="sourceLineNo">788</span>  @VisibleForTesting<a name="line.788"></a>
-<span class="sourceLineNo">789</span>  protected ClusterConnection createClusterConnection() throws IOException {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    Configuration conf = this.conf;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    if (conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM) != null) {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      // Use server ZK cluster for server-issued connections, so we clone<a name="line.792"></a>
-<span class="sourceLineNo">793</span>      // the conf and unset the client ZK related properties<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      conf = new Configuration(this.conf);<a name="line.794"></a>
-<span class="sourceLineNo">795</span>      conf.unset(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>    }<a name="line.796"></a>
-<span class="sourceLineNo">797</span>    // Create a cluster connection that when appropriate, can short-circuit and go directly to the<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    // local server if the request is to the local server bypassing RPC. Can be used for both local<a name="line.798"></a>
-<span class="sourceLineNo">799</span>    // and remote invocations.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    return ConnectionUtils.createShortCircuitConnection(conf, null, userProvider.getCurrent(),<a name="line.800"></a>
-<span class="sourceLineNo">801</span>      serverName, rpcServices, rpcServices);<a name="line.801"></a>
-<span class="sourceLineNo">802</span>  }<a name="line.802"></a>
-<span class="sourceLineNo">803</span><a name="line.803"></a>
-<span class="sourceLineNo">804</span>  /**<a name="line.804"></a>
-<span class="sourceLineNo">805</span>   * Run test on configured codecs to make sure supporting libs are in place.<a name="line.805"></a>
-<span class="sourceLineNo">806</span>   * @param c<a name="line.806"></a>
-<span class="sourceLineNo">807</span>   * @throws IOException<a name="line.807"></a>
-<span class="sourceLineNo">808</span>   */<a name="line.808"></a>
-<span class="sourceLineNo">809</span>  private static void checkCodecs(final Configuration c) throws IOException {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    // check to see if the codec list is available:<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    String [] codecs = c.getStrings("hbase.regionserver.codecs", (String[])null);<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    if (codecs == null) return;<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    for (String codec : codecs) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>      if (!CompressionTest.testCompression(codec)) {<a name="line.814"></a>
-<span class="sourceLineNo">815</span>        throw new IOException("Compression codec " + codec +<a name="line.815"></a>
-<span class="sourceLineNo">816</span>          " not supported, aborting RS construction");<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      }<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
-<span class="sourceLineNo">819</span>  }<a name="line.819"></a>
-<span class="sourceLineNo">820</span><a name="line.820"></a>
-<span class="sourceLineNo">821</span>  public String getClusterId() {<a name="line.821"></a>
-<span class="sourceLineNo">822</span>    return this.clusterId;<a name="line.822"></a>
-<span class="sourceLineNo">823</span>  }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>  /**<a name="line.825"></a>
-<span class="sourceLineNo">826</span>   * Setup our cluster connection if not already initialized.<a name="line.826"></a>
-<span class="sourceLineNo">827</span>   * @throws IOException<a name="line.827"></a>
-<span class="sourceLineNo">828</span>   */<a name="line.828"></a>
-<span class="sourceLineNo">829</span>  protected synchronized void setupClusterConnection() throws IOException {<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    if (clusterConnection == null) {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>      clusterConnection = createClusterConnection();<a name="line.831"></a>
-<span class="sourceLineNo">832</span>      metaTableLocator = new MetaTableLocator();<a name="line.832"></a>
-<span class="sourceLineNo">833</span>    }<a name="line.833"></a>
-<span class="sourceLineNo">834</span>  }<a name="line.834"></a>
-<span class="sourceLineNo">835</span><a name="line.835"></a>
-<span class="sourceLineNo">836</span>  /**<a name="line.836"></a>
-<span class="sourceLineNo">837</span>   * All initialization needed before we go register with Master.&lt;br&gt;<a name="line.837"></a>
-<span class="sourceLineNo">838</span>   * Do bare minimum. Do bulk of initializations AFTER we've connected to the Master.&lt;br&gt;<a name="line.838"></a>
-<span class="sourceLineNo">839</span>   * In here we just put up the RpcServer, setup Connection, and ZooKeeper.<a name="line.839"></a>
-<span class="sourceLineNo">840</span>   */<a name="line.840"></a>
-<span class="sourceLineNo">841</span>  private void preRegistrationInitialization() {<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    try {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      initializeZooKeeper();<a name="line.843"></a>
-<span class="sourceLineNo">844</span>      setupClusterConnection();<a name="line.844"></a>
-<span class="sourceLineNo">845</span>      // Setup RPC client for master communication<a name="line.845"></a>
-<span class="sourceLineNo">846</span>      this.rpcClient = RpcClientFactory.createClient(conf, clusterId, new InetSocketAddress(<a name="line.846"></a>
-<span class="sourceLineNo">847</span>          this.rpcServices.isa.getAddress(), 0), clusterConnection.getConnectionMetrics());<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    } catch (Throwable t) {<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      // Call stop if error or process will stick around for ever since server<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      // puts up non-daemon threads.<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      this.rpcServices.stop();<a name="line.851"></a>
-<span class="sourceLineNo">852</span>      abort("Initialization of RS failed.  Hence aborting RS.", t);<a name="line.852"></a>
-<span class="sourceLineNo">853</span>    }<a name="line.853"></a>
-<span class="sourceLineNo">854</span>  }<a name="line.854"></a>
-<span class="sourceLineNo">855</span><a name="line.855"></a>
-<span class="sourceLineNo">856</span>  /**<a name="line.856"></a>
-<span class="sourceLineNo">857</span>   * Bring up connection to zk ensemble and then wait until a master for this cluster and then after<a name="line.857"></a>
-<span class="sourceLineNo">858</span>   * that, wait until cluster 'up' flag has been set. This is the order in which master does things.<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * &lt;p&gt;<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * Finally open long-living server short-circuit connection.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   */<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE",<a name="line.862"></a>
-<span class="sourceLineNo">863</span>    justification="cluster Id znode read would give us correct response")<a name="line.863"></a>
-<span class="sourceLineNo">864</span>  private void initializeZooKeeper() throws IOException, InterruptedException {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>    // Nothing to do in here if no Master in the mix.<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    if (this.masterless) {<a name="line.866"></a>
-<span class="sourceLineNo">867</span>      return;<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    }<a name="line.868"></a>
-<span class="sourceLineNo">869</span><a name="line.869"></a>
-<span class="sourceLineNo">870</span>    // Create the master address tracker, register with zk, and start it.  Then<a name="line.870"></a>
-<span class="sourceLineNo">871</span>    // block until a master is available.  No point in starting up if no master<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    // running.<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    blockAndCheckIfStopped(this.masterAddressTracker);<a name="line.873"></a>
-<span class="sourceLineNo">874</span><a name="line.874"></a>
-<span class="sourceLineNo">875</span>    // Wait on cluster being up.  Master will set this flag up in zookeeper<a name="line.875"></a>
-<span class="sourceLineNo">876</span>    // when ready.<a name="line.876"></a>
-<span class="sourceLineNo">877</span>    blockAndCheckIfStopped(this.clusterStatusTracker);<a name="line.877"></a>
-<span class="sourceLineNo">878</span><a name="line.878"></a>
-<span class="sourceLineNo">879</span>    // If we are HMaster then the cluster id should have already been set.<a name="line.879"></a>
-<span class="sourceLineNo">880</span>    if (clusterId == null) {<a name="line.880"></a>
-<span class="sourceLineNo">881</span>      // Retrieve clusterId<a name="line.881"></a>
-<span class="sourceLineNo">882</span>      // Since cluster status is now up<a name="line.882"></a>
-<span class="sourceLineNo">883</span>      // ID should have already been set by HMaster<a name="line.883"></a>
-<span class="sourceLineNo">884</span>      try {<a name="line.884"></a>
-<span class="sourceLineNo">885</span>        clusterId = ZKClusterId.readClusterIdZNode(this.zooKeeper);<a name="line.885"></a>
-<span class="sourceLineNo">886</span>        if (clusterId == null) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>          this.abort("Cluster ID has not been set");<a name="line.887"></a>
-<span class="sourceLineNo">888</span>        }<a name="line.888"></a>
-<span class="sourceLineNo">889</span>        LOG.info("ClusterId : " + clusterId);<a name="line.889"></a>
-<span class="sourceLineNo">890</span>      } catch (KeeperException e) {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>        this.abort("Failed to retrieve Cluster ID", e);<a name="line.891"></a>
-<span class="sourceLineNo">892</span>      }<a name="line.892"></a>
-<span class="sourceLineNo">893</span>    }<a name="line.893"></a>
-<span class="sourceLineNo">894</span><a name="line.894"></a>
-<span class="sourceLineNo">895</span>    waitForMasterActive();<a name="line.895"></a>
-<span class="sourceLineNo">896</span>    if (isStopped() || isAborted()) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      return; // No need for further initialization<a name="line.897"></a>
-<span class="sourceLineNo">898</span>    }<a name="line.898"></a>
-<span class="sourceLineNo">899</span><a name="line.899"></a>
-<span class="sourceLineNo">900</span>    // watch for snapshots and other procedures<a name="line.900"></a>
-<span class="sourceLineNo">901</span>    try {<a name="line.901"></a>
-<span class="sourceLineNo">902</span>      rspmHost = new RegionServerProcedureManagerHost();<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      rspmHost.loadProcedures(conf);<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      rspmHost.initialize(this);<a name="line.904"></a>
-<span class="sourceLineNo">905</span>    } catch (KeeperException e) {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>      this.abort("Failed to reach coordination cluster when creating procedure handler.", e);<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><a name="line.909"></a>
-<span class="sourceLineNo">910</span>  /**<a name="line.910"></a>
-<span class="sourceLineNo">911</span>   * Utilty method to wait indefinitely on a znode availability while checking<a name="line.911"></a>
-<span class="sourceLineNo">912</span>   * if the region server is shut down<a name="line.912"></a>
-<span class="sourceLineNo">913</span>   * @param tracker znode tracker to use<a name="line.913"></a>
-<span class="sourceLineNo">914</span>   * @throws IOException any IO exception, plus if the RS is stopped<a name="line.914"></a>
-<span class="sourceLineNo">915</span>   * @throws InterruptedException<a name="line.915"></a>
-<span class="sourceLineNo">916</span>   */<a name="line.916"></a>
-<span class="sourceLineNo">917</span>  private void blockAndCheckIfStopped(ZKNodeTracker tracker)<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      throws IOException, InterruptedException {<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    while (tracker.blockUntilAvailable(this.msgInterval, false) == null) {<a name="line.919"></a>
-<span class="sourceLineNo">920</span>      if (this.stopped) {<a name="line.920"></a>
-<span class="sourceLineNo">921</span>        throw new IOException("Received the shutdown message while waiting.");<a name="line.921"></a>
-<span class="sourceLineNo">922</span>      }<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    }<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  }<a name="line.924"></a>
-<span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>  /**<a name="line.926"></a>
-<span class="sourceLineNo">927</span>   * @return True if the cluster is up.<a name="line.927"></a>
-<span class="sourceLineNo">928</span>   */<a name="line.928"></a>
-<span class="sourceLineNo">929</span>  @Override<a name="line.929"></a>
-<span class="sourceLineNo">930</span>  public boolean isClusterUp() {<a name="line.930"></a>
-<span class="sourceLineNo">931</span>    return this.masterless ||<a name="line.931"></a>
-<span class="sourceLineNo">932</span>        (this.clusterStatusTracker != null &amp;&amp; this.clusterStatusTracker.isClusterUp());<a name="line.932"></a>
-<span class="sourceLineNo">933</span>  }<a name="line.933"></a>
-<span class="sourceLineNo">934</span><a name="line.934"></a>
-<span class="sourceLineNo">935</span>  /**<a name="line.935"></a>
-<span class="sourceLineNo">936</span>   * The HRegionServer sticks in this loop until closed.<a name="line.936"></a>
-<span class="sourceLineNo">937</span>   */<a name="line.937"></a>
-<span class="sourceLineNo">938</span>  @Override<a name="line.938"></a>
-<span class="sourceLineNo">939</span>  public void run() {<a name="line.939"></a>
-<span class="sourceLineNo">940</span>    try {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>      // Do pre-registration initializations; zookeeper, lease threads, etc.<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      preRegistrationInitialization();<a name="line.942"></a>
-<span class="sourceLineNo">943</span>    } catch (Throwable e) {<a name="line.943"></a>
-<span class="sourceLineNo">944</span>      abort("Fatal exception during initialization", e);<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    }<a name="line.945"></a>
-<span class="sourceLineNo">946</span><a name="line.946"></a>
-<span class="sourceLineNo">947</span>    try {<a name="line.947"></a>
-<span class="sourceLineNo">948</span>      if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.948"></a>
-<span class="sourceLineNo">949</span>        ShutdownHook.install(conf, fs, this, Thread.currentThread());<a name="line.949"></a>
-<span class="sourceLineNo">950</span>        // Initialize the RegionServerCoprocessorHost now that our ephemeral<a name="line.950"></a>
-<span class="sourceLineNo">951</span>        // node was created, in case any coprocessors want to use ZooKeeper<a name="line.951"></a>
-<span class="sourceLineNo">952</span>        this.rsHost = new RegionServerCoprocessorHost(this, this.conf);<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      }<a name="line.953"></a>
-<span class="sourceLineNo">954</span><a name="line.954"></a>
-<span class="sourceLineNo">955</span>      // Try and register with the Master; tell it we are here.  Break if server is stopped or the<a name="line.955"></a>
-<span class="sourceLineNo">956</span>      // clusterup flag is down or hdfs went wacky. Once registered successfully, go ahead and start<a name="line.956"></a>
-<span class="sourceLineNo">957</span>      // up all Services. Use RetryCounter to get backoff in case Master is struggling to come up.<a name="line.957"></a>
-<span class="sourceLineNo">958</span>      LOG.debug("About to register with Master.");<a name="line.958"></a>
-<span class="sourceLineNo">959</span>      RetryCounterFactory rcf = new RetryCounterFactory(Integer.MAX_VALUE,<a name="line.959"></a>
-<span class="sourceLineNo">960</span>          this.sleeper.getPeriod(), 1000 * 60 * 5);<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      RetryCounter rc = rcf.create();<a name="line.961"></a>
-<span class="sourceLineNo">962</span>      while (keepLooping()) {<a name="line.962"></a>
-<span class="sourceLineNo">963</span>        RegionServerStartupResponse w = reportForDuty();<a name="line.963"></a>
-<span class="sourceLineNo">964</span>        if (w == null) {<a name="line.964"></a>
-<span class="sourceLineNo">965</span>          long sleepTime = rc.getBackoffTimeAndIncrementAttempts();<a name="line.965"></a>
-<span class="sourceLineNo">966</span>          LOG.warn("reportForDuty failed; sleeping {} ms and then retrying.", sleepTime);<a name="line.966"></a>
-<span class="sourceLineNo">967</span>          this.sleeper.sleep(sleepTime);<a name="line.967"></a>
-<span class="sourceLineNo">968</span>        } else {<a name="line.968"></a>
-<span class="sourceLineNo">969</span>          handleReportForDutyResponse(w);<a name="line.969"></a>
-<span class="sourceLineNo">970</span>          break;<a name="line.970"></a>
-<span class="sourceLineNo">971</span>        }<a name="line.971"></a>
-<span class="sourceLineNo">972</span>      }<a name="line.972"></a>
-<span class="sourceLineNo">973</span><a name="line.973"></a>
-<span class="sourceLineNo">974</span>      if (!isStopped() &amp;&amp; isHealthy()) {<a name="line.974"></a>
-<span class="sourceLineNo">975</span>        // start the snapshot handler and other procedure handlers,<a name="line.975"></a>
-<span class="sourceLineNo">976</span>        // since the server is ready to run<a name="line.976"></a>
-<span class="sourceLineNo">977</span>        if (this.rspmHost != null) {<a name="line.977"></a>
-<span class="sourceLineNo">978</span>          this.rspmHost.start();<a name="line.978"></a>
-<span class="sourceLineNo">979</span>        }<a name="line.979"></a>
-<span class="sourceLineNo">980</span>        // Start the Quota Manager<a name="line.980"></a>
-<span class="sourceLineNo">981</span>        if (this.rsQuotaManager != null) {<a name="line.981"></a>
-<span class="sourceLineNo">982</span>          rsQuotaManager.start(getRpcServer().getScheduler());<a name="line.982"></a>
-<span class="sourceLineNo">983</span>        }<a name="line.983"></a>
-<span class="sourceLineNo">984</span>        if (this.rsSpaceQuotaManager != null) {<a name="line.984"></a>
-<span class="sourceLineNo">985</span>          this.rsSpaceQuotaManager.start();<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        }<a name="line.986"></a>
-<span class="sourceLineNo">987</span>      }<a name="line.987"></a>
-<span class="sourceLineNo">988</span><a name="line.988"></a>
-<span class="sourceLineNo">989</span>      // We registered with the Master.  Go into run mode.<a name="line.989"></a>
-<span class="sourceLineNo">990</span>      long lastMsg = System.currentTimeMillis();<a name="line.990"></a>
-<span class="sourceLineNo">991</span>      long oldRequestCount = -1;<a name="line.991"></a>
-<span class="sourceLineNo">992</span>      // The main run loop.<a name="line.992"></a>
-<span class="sourceLineNo">993</span>      while (!isStopped() &amp;&amp; isHealthy()) {<a name="line.993"></a>
-<span class="sourceLineNo">994</span>        if (!isClusterUp()) {<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          if (isOnlineRegionsEmpty()) {<a name="line.995"></a>
-<span class="sourceLineNo">996</span>            stop("Exiting; cluster shutdown set and not carrying any regions");<a name="line.996"></a>
-<span class="sourceLineNo">997</span>          } else if (!this.stopping) {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>            this.stopping = true;<a name="line.998"></a>
-<span class="sourceLineNo">999</span>            LOG.info("Closing user regions");<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>            closeUserRegions(this.abortRequested);<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>          } else if (this.stopping) {<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>            boolean allUserRegionsOffline = areAllUserRegionsOffline();<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>            if (allUserRegionsOffline) {<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>              // Set stopped if no more write requests tp meta tables<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>              // since last time we went around the loop.  Any open<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>              // meta regions will be closed on our way out.<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>              if (oldRequestCount == getWriteRequestCount()) {<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>                stop("Stopped; only catalog regions remaining online");<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>                break;<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>              }<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>              oldRequestCount = getWriteRequestCount();<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>            } else {<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>              // Make sure all regions have been closed -- some regions may<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>              // have not got it because we were splitting at the time of<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>              // the call to closeUserRegions.<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>              closeUserRegions(this.abortRequested);<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>            }<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>            LOG.debug("Waiting on " + getOnlineRegionsAsPrintableString());<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>          }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>        }<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>        long now = System.currentTimeMillis();<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>        if ((now - lastMsg) &gt;= msgInterval) {<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>          tryRegionServerReport(lastMsg, now);<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>          lastMsg = System.currentTimeMillis();<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>        }<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>        if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>          this.sleeper.sleep();<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>        }<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>      } // for<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    } catch (Throwable t) {<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      if (!rpcServices.checkOOME(t)) {<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>        String prefix = t instanceof YouAreDeadException? "": "Unhandled: ";<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        abort(prefix + t.getMessage(), t);<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      }<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>    }<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span><a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>    if (abortRequested) {<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>      Timer abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      TimerTask abortTimeoutTask = null;<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>      try {<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>        abortTimeoutTask =<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>            Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>                .asSubclass(TimerTask.class).getDeclaredConstructor().newInstance();<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>      } catch (Exception e) {<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>      }<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>      if (abortTimeoutTask != null) {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>      }<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span><a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    if (this.leases != null) {<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>      this.leases.closeAfterLeasesExpire();<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>    }<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    if (this.splitLogWorker != null) {<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>      splitLogWorker.stop();<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    }<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    if (this.infoServer != null) {<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      LOG.info("Stopping infoServer");<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      try {<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>        this.infoServer.stop();<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>      } catch (Exception e) {<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>        LOG.error("Failed to stop infoServer", e);<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>      }<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    }<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    // Send cache a shutdown.<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    if (cacheConfig != null &amp;&amp; cacheConfig.isBlockCacheEnabled()) {<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>      cacheConfig.getBlockCache().shutdown();<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>    }<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    mobCacheConfig.getMobFileCache().shutdown();<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span><a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    if (movedRegionsCleaner != null) {<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>      movedRegionsCleaner.stop("Region Server stopping");<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>    // Send interrupts to wake up threads if sleeping so they notice shutdown.<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    // TODO: Should we check they are alive? If OOME could have exited already<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>    if (this.hMemManager != null) this.hMemManager.stop();<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    if (this.cacheFlusher != null) this.cacheFlusher.interruptIfNecessary();<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    if (this.compactSplitThread != null) this.compactSplitThread.interruptIfNecessary();<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>    sendShutdownInterrupt();<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span><a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>    // Stop the snapshot and other procedure handlers, forcefully killing all running tasks<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>    if (rspmHost != null) {<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>      rspmHost.stop(this.abortRequested || this.killed);<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    }<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span><a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    if (this.killed) {<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>      // Just skip out w/o closing regions.  Used when testing.<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    } else if (abortRequested) {<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>      if (this.fsOk) {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>        closeUserRegions(abortRequested); // Don't leave any open file handles<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      }<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>      LOG.info("aborting server " + this.serverName);<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    } else {<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      closeUserRegions(abortRequested);<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>      LOG.info("stopping server " + this.serverName);<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>    // so callers waiting for meta without timeout can stop<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    if (this.metaTableLocator != null) this.metaTableLocator.stop();<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    if (this.clusterConnection != null &amp;&amp; !clusterConnection.isClosed()) {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>      try {<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>        this.clusterConnection.close();<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>      } catch (IOException e) {<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>        // Although the {@link Closeable} interface throws an {@link<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>        // IOException}, in reality, the implementation would never do that.<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>        LOG.warn("Attempt to close server's short circuit ClusterConnection failed.", e);<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      }<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    }<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span><a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>    // Closing the compactSplit thread before closing meta regions<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>    if (!this.killed &amp;&amp; containsMetaTableRegions()) {<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>      if (!abortRequested || this.fsOk) {<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>        if (this.compactSplitThread != null) {<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>          this.compactSplitThread.join();<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>          this.compactSplitThread = null;<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>        }<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>        closeMetaTableRegions(abortRequested);<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>      }<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>    }<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span><a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    if (!this.killed &amp;&amp; this.fsOk) {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>      waitOnAllRegionsToClose(abortRequested);<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>      LOG.info("stopping server " + this.serverName + "; all regions closed.");<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>    // Stop the quota manager<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    if (rsQuotaManager != null) {<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>      rsQuotaManager.stop();<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    }<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    if (rsSpaceQuotaManager != null) {<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>      rsSpaceQuotaManager.stop();<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>      rsSpaceQuotaManager = null;<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>    //fsOk flag may be changed when closing regions throws exception.<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>    if (this.fsOk) {<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>      shutdownWAL(!abortRequested);<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>    // Make sure the proxy is down.<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    if (this.rssStub != null) {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>      this.rssStub = null;<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>    }<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    if (this.lockStub != null) {<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>      this.lockStub = null;<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>    }<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    if (this.rpcClient != null) {<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>      this.rpcClient.close();<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    }<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>    if (this.leases != null) {<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>      this.leases.close();<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>    }<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>    if (this.pauseMonitor != null) {<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>      this.pauseMonitor.stop();<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    }<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span><a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    if (!killed) {<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      stopServiceThreads();<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>    if (this.rpcServices != null) {<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      this.rpcServices.stop();<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>    try {<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>      deleteMyEphemeralNode();<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    } catch (KeeperException.NoNodeException nn) {<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>    } catch (KeeperException e) {<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>      LOG.warn("Failed deleting my ephemeral node", e);<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>    }<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    // We may have failed to delete the znode at the previous step, but<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>    //  we delete the file anyway: a second attempt to delete the znode is likely to fail again.<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    ZNodeClearer.deleteMyEphemeralNodeOnDisk();<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span><a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    if (this.zooKeeper != null) {<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>      this.zooKeeper.close();<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    }<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>    this.shutDown = true;<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>    LOG.info("Exiting; stopping=" + this.serverName + "; zookeeper connection closed.");<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>  private boolean containsMetaTableRegions() {<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    return onlineRegions.containsKey(RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedName());<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>  private boolean areAllUserRegionsOffline() {<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>    if (getNumberOfOnlineRegions() &gt; 2) return false;<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>    boolean allUserRegionsOffline = true;<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>      if (!e.getValue().getRegionInfo().isMetaRegion()) {<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>        allUserRegionsOffline = false;<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>        break;<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      }<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>    }<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>    return allUserRegionsOffline;<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>  /**<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>   * @return Current write count for all online regions.<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>   */<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>  private long getWriteRequestCount() {<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>    long writeCount = 0;<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>      writeCount += e.getValue().getWriteRequestsCount();<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>    }<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>    return writeCount;<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>  @VisibleForTesting<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>  protected void tryRegionServerReport(long reportStartTime, long reportEndTime)<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>      throws IOException {<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>    if (rss == null) {<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>      // the current server could be stopping.<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>      return;<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>    }<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>    ClusterStatusProtos.ServerLoad sl = buildServerLoad(reportStartTime, reportEndTime);<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>    try {<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>      RegionServerReportRequest.Builder request = RegionServerReportRequest.newBuilder();<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>      request.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>      request.setLoad(sl);<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>      rss.regionServerReport(null, request.build());<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>    } catch (ServiceException se) {<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>        // This will be caught and handled as a fatal error in run()<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>        throw ioe;<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>      }<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>      if (rssStub == rss) {<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>        rssStub = null;<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>      }<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>      // Method blocks until new master is found or we are stopped<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>      createRegionServerStatusStub(true);<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>    }<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>  }<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span><a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>  /**<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>   *<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>   * @param regionSizeStore The store containing region sizes<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>   */<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>    if (rss == null) {<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>      // the current server could be stopping.<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>      return true;<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    }<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>    try {<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>    } catch (ServiceException se) {<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>            + " This will be retried.", ioe);<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>        return true;<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>      }<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      if (rssStub == rss) {<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>        rssStub = null;<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>      }<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>      createRegionServerStatusStub(true);<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>            return false;<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>          }<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>        }<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>      }<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>    }<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>    return true;<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>  }<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span><a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>  /**<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>   *<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>   * @param rss The stub to send to the Master<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>   * @param regionSizeStore The store containing region sizes<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>   */<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>  void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>    RegionSpaceUseReportRequest request =<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>    // Record the number of size reports sent<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>    if (metricsRegionServer != null) {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>    }<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>  }<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span><a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>  /**<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>   *<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>   * @param regionSizes The size in bytes of regions<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>   * @return The corresponding protocol buffer message.<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>   */<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>    }<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>    return request.build();<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>  }<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span><a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>  /**<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>   * protobuf message.<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>   *<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>   * @param regionInfo The RegionInfo<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>   * @return The protocol buffer<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>   */<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>    return RegionSpaceUse.newBuilder()<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>        .build();<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>  }<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span><a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>  ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>      throws IOException {<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>    // the wrapper to compute those numbers in one place.<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    // history.<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>    long usedMemory = -1L;<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>    long maxMemory = -1L;<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>    if (usage != null) {<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>      usedMemory = usage.getUsed();<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>      maxMemory = usage.getMax();<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>    }<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span><a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newB

<TRUNCATED>

[23/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
index d657153..3385008 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
@@ -2502,7 +2502,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForMetaOnline</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1198">waitForMetaOnline</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1201">waitForMetaOnline</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Check hbase:meta is up and ready for reading. For use during Master startup only.</div>
 <dl>
@@ -2520,7 +2520,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>isRegionOnline</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1206">isRegionOnline</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;ri)
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1209">isRegionOnline</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;ri)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -2537,7 +2537,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForNamespaceOnline</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1239">waitForNamespaceOnline</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1242">waitForNamespaceOnline</a>()
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Check hbase:namespace table is assigned. If not, startup will hang looking for the ns table
  (TODO: Fix this! NS should not hold-up startup).</div>
@@ -2555,7 +2555,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>updateConfigurationForQuotasObserver</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1259">updateConfigurationForQuotasObserver</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1262">updateConfigurationForQuotasObserver</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">Adds the <code>MasterQuotasObserver</code> to the list of configured Master observers to
  automatically remove quotas for a table when that table is deleted.</div>
 </li>
@@ -2566,7 +2566,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>initMobCleaner</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1276">initMobCleaner</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1279">initMobCleaner</a>()</pre>
 </li>
 </ul>
 <a name="createMetaBootstrap--">
@@ -2575,7 +2575,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createMetaBootstrap</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterMetaBootstrap.html" title="class in org.apache.hadoop.hbase.master">MasterMetaBootstrap</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1301">createMetaBootstrap</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterMetaBootstrap.html" title="class in org.apache.hadoop.hbase.master">MasterMetaBootstrap</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1304">createMetaBootstrap</a>()</pre>
 <div class="block"><p>
  Create a <a href="../../../../../org/apache/hadoop/hbase/master/MasterMetaBootstrap.html" title="class in org.apache.hadoop.hbase.master"><code>MasterMetaBootstrap</code></a> instance.
  </p>
@@ -2590,7 +2590,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createServerManager</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1316">createServerManager</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;master)
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1319">createServerManager</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;master)
                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><p>
  Create a <a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master"><code>ServerManager</code></a> instance.
@@ -2610,7 +2610,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForRegionServers</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1323">waitForRegionServers</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1326">waitForRegionServers</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
@@ -2626,7 +2626,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>initClusterSchemaService</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1330">initClusterSchemaService</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1333">initClusterSchemaService</a>()
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
@@ -2642,7 +2642,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>initQuotaManager</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1342">initQuotaManager</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1345">initQuotaManager</a>()
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2656,7 +2656,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createQuotaSnapshotNotifier</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.html" title="interface in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshotNotifier</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1348">createQuotaSnapshotNotifier</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.html" title="interface in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshotNotifier</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1351">createQuotaSnapshotNotifier</a>()</pre>
 </li>
 </ul>
 <a name="isCatalogJanitorEnabled--">
@@ -2665,7 +2665,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>isCatalogJanitorEnabled</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1354">isCatalogJanitorEnabled</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1357">isCatalogJanitorEnabled</a>()</pre>
 </li>
 </ul>
 <a name="isCleanerChoreEnabled--">
@@ -2674,7 +2674,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>isCleanerChoreEnabled</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1359">isCleanerChoreEnabled</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1362">isCleanerChoreEnabled</a>()</pre>
 </li>
 </ul>
 <a name="getServerManager--">
@@ -2683,7 +2683,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1374">getServerManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1377">getServerManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getServerManager--">getServerManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2698,7 +2698,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterFileSystem</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterFileSystem.html" title="class in org.apache.hadoop.hbase.master">MasterFileSystem</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1379">getMasterFileSystem</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterFileSystem.html" title="class in org.apache.hadoop.hbase.master">MasterFileSystem</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1382">getMasterFileSystem</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getMasterFileSystem--">getMasterFileSystem</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2713,7 +2713,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterWalManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterWalManager.html" title="class in org.apache.hadoop.hbase.master">MasterWalManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1384">getMasterWalManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterWalManager.html" title="class in org.apache.hadoop.hbase.master">MasterWalManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1387">getMasterWalManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getMasterWalManager--">getMasterWalManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2728,7 +2728,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableStateManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1389">getTableStateManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1392">getTableStateManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getTableStateManager--">getTableStateManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2743,7 +2743,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>startServiceThreads</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1400">startServiceThreads</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1403">startServiceThreads</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2757,7 +2757,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>stopServiceThreads</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1450">stopServiceThreads</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1453">stopServiceThreads</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#stopServiceThreads--">HRegionServer</a></code></span></div>
 <div class="block">Wait on all threads to finish. Presumption is that all closes and stops
  have already been called.</div>
@@ -2773,7 +2773,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createProcedureExecutor</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1498">createProcedureExecutor</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1501">createProcedureExecutor</a>()
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2787,7 +2787,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>startProcedureExecutor</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1527">startProcedureExecutor</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1530">startProcedureExecutor</a>()
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2801,7 +2801,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>stopProcedureExecutor</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1531">stopProcedureExecutor</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1534">stopProcedureExecutor</a>()</pre>
 </li>
 </ul>
 <a name="stopChores--">
@@ -2810,7 +2810,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>stopChores</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1546">stopChores</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1549">stopChores</a>()</pre>
 </li>
 </ul>
 <a name="getRemoteInetAddress-int-long-">
@@ -2819,7 +2819,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getRemoteInetAddress</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1566">getRemoteInetAddress</a>(int&nbsp;port,
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1569">getRemoteInetAddress</a>(int&nbsp;port,
                                  long&nbsp;serverStartCode)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/net/UnknownHostException.html?is-external=true" title="class or interface in java.net">UnknownHostException</a></pre>
 <dl>
@@ -2836,7 +2836,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxBalancingTime</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1586">getMaxBalancingTime</a>()</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1589">getMaxBalancingTime</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Maximum time we should run balancer for</dd>
@@ -2849,7 +2849,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxRegionsInTransition</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1599">getMaxRegionsInTransition</a>()</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1602">getMaxRegionsInTransition</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Maximum number of regions in transition</dd>
@@ -2862,7 +2862,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>balanceThrottling</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1611">balanceThrottling</a>(long&nbsp;nextBalanceStartTime,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1614">balanceThrottling</a>(long&nbsp;nextBalanceStartTime,
                                int&nbsp;maxRegionsInTransition,
                                long&nbsp;cutoffTime)</pre>
 <div class="block">It first sleep to the next balance plan start time. Meanwhile, throttling by the max
@@ -2881,7 +2881,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>balance</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1642">balance</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1645">balance</a>()
                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2895,7 +2895,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>balance</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1646">balance</a>(boolean&nbsp;force)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1649">balance</a>(boolean&nbsp;force)
                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2909,7 +2909,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionNormalizer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizer.html" title="interface in org.apache.hadoop.hbase.master.normalizer">RegionNormalizer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1768">getRegionNormalizer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizer.html" title="interface in org.apache.hadoop.hbase.master.normalizer">RegionNormalizer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1771">getRegionNormalizer</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getRegionNormalizer--">getRegionNormalizer</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2924,7 +2924,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>normalizeRegions</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1779">normalizeRegions</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1782">normalizeRegions</a>()
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Perform normalization of cluster (invoked by <a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizerChore.html" title="class in org.apache.hadoop.hbase.master.normalizer"><code>RegionNormalizerChore</code></a>).</div>
 <dl>
@@ -2943,7 +2943,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getClientIdAuditPrefix</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1839">getClientIdAuditPrefix</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1842">getClientIdAuditPrefix</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getClientIdAuditPrefix--">getClientIdAuditPrefix</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2958,7 +2958,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>setCatalogJanitorEnabled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1850">setCatalogJanitorEnabled</a>(boolean&nbsp;b)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1853">setCatalogJanitorEnabled</a>(boolean&nbsp;b)</pre>
 <div class="block">Switch for the background CatalogJanitor thread.
  Used for testing.  The thread will continue to run.  It will just be a noop
  if disabled.</div>
@@ -2974,7 +2974,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>mergeRegions</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1855">mergeRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;regionsToMerge,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1858">mergeRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;regionsToMerge,
                          boolean&nbsp;forcible,
                          long&nbsp;nonceGroup,
                          long&nbsp;nonce)
@@ -3002,7 +3002,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>splitRegion</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1903">splitRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1906">splitRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                         byte[]&nbsp;splitRow,
                         long&nbsp;nonceGroup,
                         long&nbsp;nonce)
@@ -3030,7 +3030,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>move</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1929">move</a>(byte[]&nbsp;encodedRegionName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1932">move</a>(byte[]&nbsp;encodedRegionName,
                  byte[]&nbsp;destServerName)
           throws <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <dl>
@@ -3045,7 +3045,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2019">createTable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDescriptor,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2022">createTable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDescriptor,
                         byte[][]&nbsp;splitKeys,
                         long&nbsp;nonceGroup,
                         long&nbsp;nonce)
@@ -3070,7 +3070,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createSystemTable</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2061">createSystemTable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDescriptor)
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2064">createSystemTable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDescriptor)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#createSystemTable-org.apache.hadoop.hbase.client.TableDescriptor-">MasterServices</a></code></span></div>
 <div class="block">Create a system table using the given table definition.</div>
@@ -3091,7 +3091,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>sanityCheckTableDescriptor</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2089">sanityCheckTableDescriptor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2092">sanityCheckTableDescriptor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Checks whether the table conforms to some sane limits, and configured
  values (compression, etc) work. Throws an exception if something is wrong.</div>
@@ -3107,7 +3107,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkReplicationScope</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2206">checkReplicationScope</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;hcd)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2209">checkReplicationScope</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;hcd)
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3121,7 +3121,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkCompactionPolicy</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2218">checkCompactionPolicy</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2221">checkCompactionPolicy</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                    <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -3136,7 +3136,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkBloomFilterType</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2275">checkBloomFilterType</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;cfd)
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2278">checkBloomFilterType</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;cfd)
                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3150,7 +3150,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>warnOrThrowExceptionForFailure</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2286">warnOrThrowExceptionForFailure</a>(boolean&nbsp;logWarn,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2289">warnOrThrowExceptionForFailure</a>(boolean&nbsp;logWarn,
                                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;confKey,
                                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message,
                                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>&nbsp;cause)
@@ -3167,7 +3167,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>startActiveMasterManager</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2295">startActiveMasterManager</a>(int&nbsp;infoPort)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2298">startActiveMasterManager</a>(int&nbsp;infoPort)
                                throws org.apache.zookeeper.KeeperException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3181,7 +3181,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkCompression</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2348">checkCompression</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2351">checkCompression</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3195,7 +3195,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkCompression</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2356">checkCompression</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;hcd)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2359">checkCompression</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;hcd)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3209,7 +3209,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkEncryption</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2363">checkEncryption</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2366">checkEncryption</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                              <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -3224,7 +3224,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkEncryption</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2371">checkEncryption</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2374">checkEncryption</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                              <a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;hcd)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -3239,7 +3239,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkClassLoading</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2377">checkClassLoading</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2380">checkClassLoading</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -3254,7 +3254,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>isCatalogTable</h4>
-<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2383">isCatalogTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2386">isCatalogTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 <a name="deleteTable-org.apache.hadoop.hbase.TableName-long-long-">
@@ -3263,7 +3263,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteTable</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2388">deleteTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2391">deleteTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                         long&nbsp;nonceGroup,
                         long&nbsp;nonce)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3285,7 +3285,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>truncateTable</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2422">truncateTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2425">truncateTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                           boolean&nbsp;preserveSplits,
                           long&nbsp;nonceGroup,
                           long&nbsp;nonce)
@@ -3309,7 +3309,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>addColumn</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2452">addColumn</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2455">addColumn</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                       <a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;column,
                       long&nbsp;nonceGroup,
                       long&nbsp;nonce)
@@ -3333,7 +3333,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>modifyColumn</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2480">modifyColumn</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2483">modifyColumn</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          <a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;descriptor,
                          long&nbsp;nonceGroup,
                          long&nbsp;nonce)
@@ -3357,7 +3357,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteColumn</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2500">deleteColumn</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2503">deleteColumn</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          byte[]&nbsp;columnName,
                          long&nbsp;nonceGroup,
                          long&nbsp;nonce)
@@ -3381,7 +3381,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>enableTable</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2525">enableTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2528">enableTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                         long&nbsp;nonceGroup,
                         long&nbsp;nonce)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3403,7 +3403,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>disableTable</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2578">disableTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2581">disableTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          long&nbsp;nonceGroup,
                          long&nbsp;nonce)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3425,7 +3425,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableRegionForRow</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2620">getTableRegionForRow</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre><a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2623">getTableRegionForRow</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                                  byte[]&nbsp;rowKey)
                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Return the region and current deployment for the region containing
@@ -3444,7 +3444,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>modifyTable</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2646">modifyTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2649">modifyTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html" title="interface in org.apache.hadoop.hbase.master">HMaster.TableDescriptorGetter</a>&nbsp;newDescriptorGetter,
                          long&nbsp;nonceGroup,
                          long&nbsp;nonce)
@@ -3461,7 +3461,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>modifyTable</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2684">modifyTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2687">modifyTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                         <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;newDescriptor,
                         long&nbsp;nonceGroup,
                         long&nbsp;nonce)
@@ -3485,7 +3485,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>restoreSnapshot</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2696">restoreSnapshot</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;snapshotDesc,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2699">restoreSnapshot</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;snapshotDesc,
                             long&nbsp;nonceGroup,
                             long&nbsp;nonce,
                             boolean&nbsp;restoreAcl)
@@ -3502,7 +3502,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkTableExists</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2720">checkTableExists</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2723">checkTableExists</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                               <a href="../../../../../org/apache/hadoop/hbase/TableNotFoundException.html" title="class in org.apache.hadoop.hbase">TableNotFoundException</a></pre>
 <dl>
@@ -3518,7 +3518,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkTableModifiable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2728">checkTableModifiable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2731">checkTableModifiable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                  <a href="../../../../../org/apache/hadoop/hbase/TableNotFoundException.html" title="class in org.apache.hadoop.hbase">TableNotFoundException</a>,
                                  <a href="../../../../../org/apache/hadoop/hbase/TableNotDisabledException.html" title="class in org.apache.hadoop.hbase">TableNotDisabledException</a></pre>
@@ -3542,7 +3542,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterMetricsWithoutCoprocessor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2740">getClusterMetricsWithoutCoprocessor</a>()
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2743">getClusterMetricsWithoutCoprocessor</a>()
                                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3556,7 +3556,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterMetricsWithoutCoprocessor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2744">getClusterMetricsWithoutCoprocessor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase">ClusterMetrics.Option</a>&gt;&nbsp;options)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2747">getClusterMetricsWithoutCoprocessor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase">ClusterMetrics.Option</a>&gt;&nbsp;options)
                                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3570,7 +3570,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterMetrics</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2806">getClusterMetrics</a>()
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2809">getClusterMetrics</a>()
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -3586,7 +3586,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterMetrics</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2810">getClusterMetrics</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase">ClusterMetrics.Option</a>&gt;&nbsp;options)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2813">getClusterMetrics</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase">ClusterMetrics.Option</a>&gt;&nbsp;options)
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3600,7 +3600,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getBackupMasters</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2821">getBackupMasters</a>()
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2824">getBackupMasters</a>()
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3614,7 +3614,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getLoadedCoprocessors</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2874">getLoadedCoprocessors</a>()</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2877">getLoadedCoprocessors</a>()</pre>
 <div class="block">The set of loaded coprocessors is stored in a static set. Since it's
  statically allocated, it does not require that HMaster's cpHost be
  initialized prior to accessing it.</div>
@@ -3630,7 +3630,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterStartTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2881">getMasterStartTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2884">getMasterStartTime</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>timestamp in millis when HMaster was started.</dd>
@@ -3643,7 +3643,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterActiveTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2888">getMasterActiveTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2891">getMasterActiveTime</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>timestamp in millis when HMaster became the active master.</dd>
@@ -3656,7 +3656,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterFinishedInitializationTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2895">getMasterFinishedInitializationTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2898">getMasterFinishedInitializationTime</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>timestamp in millis when HMaster finished becoming the active master</dd>
@@ -3669,7 +3669,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumWALFiles</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2899">getNumWALFiles</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2902">getNumWALFiles</a>()</pre>
 </li>
 </ul>
 <a name="getWalProcedureStore--">
@@ -3678,7 +3678,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getWalProcedureStore</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2903">getWalProcedureStore</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2906">getWalProcedureStore</a>()</pre>
 </li>
 </ul>
 <a name="getRegionServerInfoPort-org.apache.hadoop.hbase.ServerName-">
@@ -3687,7 +3687,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerInfoPort</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2907">getRegionServerInfoPort</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2910">getRegionServerInfoPort</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</pre>
 </li>
 </ul>
 <a name="getRegionServerVersion-org.apache.hadoop.hbase.ServerName-">
@@ -3696,7 +3696,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerVersion</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2914">getRegionServerVersion</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2917">getRegionServerVersion</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getRegionServerVersion-org.apache.hadoop.hbase.ServerName-">getRegionServerVersion</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -3709,7 +3709,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkIfShouldMoveSystemRegionAsync</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2921">checkIfShouldMoveSystemRegionAsync</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2924">checkIfShouldMoveSystemRegionAsync</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#checkIfShouldMoveSystemRegionAsync--">MasterServices</a></code></span></div>
 <div class="block">Called when a new RegionServer is added to the cluster.
  Checks if new server has a newer version than any existing server and will move system tables
@@ -3726,7 +3726,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterCoprocessors</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2928">getMasterCoprocessors</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2931">getMasterCoprocessors</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>array of coprocessor SimpleNames.</dd>
@@ -3739,7 +3739,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2934">abort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2937">abort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cause)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#abort-java.lang.String-java.lang.Throwable-">HRegionServer</a></code></span></div>
 <div class="block">Cause the server to exit without closing the regions it is serving, the log
@@ -3762,7 +3762,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getZooKeeper</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2958">getZooKeeper</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2961">getZooKeeper</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getZooKeeper--">Server</a></code></span></div>
 <div class="block">Gets the ZooKeeper instance for this server.</div>
 <dl>
@@ -3779,7 +3779,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterCoprocessorHost</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html" title="class in org.apache.hadoop.hbase.master">MasterCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2963">getMasterCoprocessorHost</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html" title="class in org.apache.hadoop.hbase.master">MasterCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2966">getMasterCoprocessorHost</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getMasterCoprocessorHost--">getMasterCoprocessorHost</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -3794,7 +3794,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterQuotaManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/MasterQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">MasterQuotaManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2968">getMasterQuotaManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/MasterQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">MasterQuotaManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2971">getMasterQuotaManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getMasterQuotaManager--">getMasterQuotaManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -3809,7 +3809,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterProcedureExecutor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2973">getMasterProcedureExecutor</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2976">getMasterProcedureExecutor</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getMasterProcedureExecutor--">getMasterProcedureExecutor</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -3824,7 +3824,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerName</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2978">getServerName</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2981">getServerName</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getServerName--">getServerName</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a></code></dd>
@@ -3841,7 +3841,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getAssignmentManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2983">getAssignmentManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2986">getAssignmentManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getAssignmentManager--">getAssignmentManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -3856,7 +3856,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getCatalogJanitor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.html" title="class in org.apache.hadoop.hbase.master">CatalogJanitor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2988">getCatalogJanitor</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.html" title="class in org.apache.hadoop.hbase.master">CatalogJanitor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2991">getCatalogJanitor</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getCatalogJanitor--">getCatalogJanitor</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -3871,7 +3871,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerFatalLogBuffer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/MemoryBoundedLogMessageBuffer.html" title="class in org.apache.hadoop.hbase.monitoring">MemoryBoundedLogMessageBuffer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2992">getRegionServerFatalLogBuffer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/MemoryBoundedLogMessageBuffer.html" title="class in org.apache.hadoop.hbase.monitoring">MemoryBoundedLogMessageBuffer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2995">getRegionServerFatalLogBuffer</a>()</pre>
 </li>
 </ul>
 <a name="shutdown--">
@@ -3880,7 +3880,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3000">shutdown</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3003">shutdown</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">Shutdown the cluster.
  Master runs a coordinated stop of all RegionServers and then itself.</div>
@@ -3896,7 +3896,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>stopMaster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3032">stopMaster</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3035">stopMaster</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>
@@ -3910,7 +3910,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3040">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;msg)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3043">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;msg)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html#stop-java.lang.String-">Stoppable</a></code></span></div>
 <div class="block">Stop this service.
  Implementers should favor logging errors over throwing RuntimeExceptions.</div>
@@ -3930,7 +3930,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkServiceStarted</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3050">checkServiceStarted</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3053">checkServiceStarted</a>()
                             throws <a href="../../../../../org/apache/hadoop/hbase/ipc/ServerNotRunningYetException.html" title="class in org.apache.hadoop.hbase.ipc">ServerNotRunningYetException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3944,7 +3944,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkInitialized</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3062">checkInitialized</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3065">checkInitialized</a>()
                throws <a href="../../../../../org/apache/hadoop/hbase/PleaseHoldException.html" title="class in org.apache.hadoop.hbase">PleaseHoldException</a>,
                       <a href="../../../../../org/apache/hadoop/hbase/ipc/ServerNotRunningYetException.html" title="class in org.apache.hadoop.hbase.ipc">ServerNotRunningYetException</a>,
                       <a href="../../../../../org/apache/hadoop/hbase/MasterNotRunningException.html" title="class in org.apache.hadoop.hbase">MasterNotRunningException</a>,
@@ -3964,7 +3964,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>isActiveMaster</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3082">isActiveMaster</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3085">isActiveMaster</a>()</pre>
 <div class="block">Report whether this master is currently the active master or not.
  If not active master, we are parked on ZK waiting to become active.
 
@@ -3983,7 +3983,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>isInitialized</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3096">isInitialized</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3099">isInitialized</a>()</pre>
 <div class="

<TRUNCATED>

[04/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html
index bf81ebb..a170ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html
@@ -606,3246 +606,3245 @@
 <span class="sourceLineNo">598</span><a name="line.598"></a>
 <span class="sourceLineNo">599</span>      regionServerAccounting = new RegionServerAccounting(conf);<a name="line.599"></a>
 <span class="sourceLineNo">600</span>      boolean isMasterNotCarryTable =<a name="line.600"></a>
-<span class="sourceLineNo">601</span>          this instanceof HMaster &amp;&amp; !LoadBalancer.isTablesOnMaster(conf) &amp;&amp; !LoadBalancer<a name="line.601"></a>
-<span class="sourceLineNo">602</span>              .isSystemTablesOnlyOnMaster(conf);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      cacheConfig = new CacheConfig(conf, !isMasterNotCarryTable);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      mobCacheConfig = new MobCacheConfig(conf, !isMasterNotCarryTable);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      uncaughtExceptionHandler = new UncaughtExceptionHandler() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>        @Override<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        public void uncaughtException(Thread t, Throwable e) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>          abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        }<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      };<a name="line.610"></a>
-<span class="sourceLineNo">611</span><a name="line.611"></a>
-<span class="sourceLineNo">612</span>      initializeFileSystem();<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      spanReceiverHost = SpanReceiverHost.getInstance(getConfiguration());<a name="line.613"></a>
-<span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>      this.configurationManager = new ConfigurationManager();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      setupWindows(getConfiguration(), getConfigurationManager());<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>      // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>        // Open connection to zookeeper and set primary watcher<a name="line.620"></a>
-<span class="sourceLineNo">621</span>        zooKeeper = new ZKWatcher(conf, getProcessName() + ":" +<a name="line.621"></a>
-<span class="sourceLineNo">622</span>          rpcServices.isa.getPort(), this, canCreateBaseZNode());<a name="line.622"></a>
-<span class="sourceLineNo">623</span>        // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.623"></a>
-<span class="sourceLineNo">624</span>        if (!this.masterless) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>          this.csm = new ZkCoordinatedStateManager(this);<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span>          masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.627"></a>
-<span class="sourceLineNo">628</span>          masterAddressTracker.start();<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>          clusterStatusTracker = new ClusterStatusTracker(zooKeeper, this);<a name="line.630"></a>
-<span class="sourceLineNo">631</span>          clusterStatusTracker.start();<a name="line.631"></a>
-<span class="sourceLineNo">632</span>        } else {<a name="line.632"></a>
-<span class="sourceLineNo">633</span>          masterAddressTracker = null;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>          clusterStatusTracker = null;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>        }<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      } else {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>        zooKeeper = null;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        masterAddressTracker = null;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        clusterStatusTracker = null;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      }<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      this.rpcServices.start(zooKeeper);<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      // This violates 'no starting stuff in Constructor' but Master depends on the below chore<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      // and executor being created and takes a different startup route. Lots of overlap between HRS<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      // and M (An M IS A HRS now). Need to refactor so less duplication between M and its super<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      // Master expects Constructor to put up web servers. Ugh.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      // class HRS. TODO.<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      this.choreService = new ChoreService(getName(), true);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      this.executorService = new ExecutorService(getName());<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      putUpWebUI();<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    } catch (Throwable t) {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      // cause of failed startup is lost.<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      LOG.error("Failed construction RegionServer", t);<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      throw t;<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>  }<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span>  // HMaster should override this method to load the specific config for master<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    String hostname = conf.get(RS_HOSTNAME_KEY);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    if (conf.getBoolean(RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.662"></a>
-<span class="sourceLineNo">663</span>        String msg = RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and " + RS_HOSTNAME_KEY +<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          " are mutually exclusive. Do not set " + RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY +<a name="line.664"></a>
-<span class="sourceLineNo">665</span>          " to true while " + RS_HOSTNAME_KEY + " is used";<a name="line.665"></a>
-<span class="sourceLineNo">666</span>        throw new IOException(msg);<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      } else {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        return rpcServices.isa.getHostName();<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      }<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    } else {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>      return hostname;<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    }<a name="line.672"></a>
-<span class="sourceLineNo">673</span>  }<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span>  /**<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   * If running on Windows, do windows-specific setup.<a name="line.676"></a>
-<span class="sourceLineNo">677</span>   */<a name="line.677"></a>
-<span class="sourceLineNo">678</span>  private static void setupWindows(final Configuration conf, ConfigurationManager cm) {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    if (!SystemUtils.IS_OS_WINDOWS) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      Signal.handle(new Signal("HUP"), new SignalHandler() {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        @Override<a name="line.681"></a>
-<span class="sourceLineNo">682</span>        public void handle(Signal signal) {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          conf.reloadConfiguration();<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          cm.notifyAllObservers(conf);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>        }<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><a name="line.689"></a>
-<span class="sourceLineNo">690</span>  private static NettyEventLoopGroupConfig setupNetty(Configuration conf) {<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    // Initialize netty event loop group at start as we may use it for rpc server, rpc client &amp; WAL.<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    NettyEventLoopGroupConfig nelgc =<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      new NettyEventLoopGroupConfig(conf, "RS-EventLoopGroup");<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    NettyRpcClientConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    NettyAsyncFSWALConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    return nelgc;<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 void initializeFileSystem() throws IOException {<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    // Get fs instance used by this RS.  Do we use checksum verification in the hbase? If hbase<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    // checksum verification enabled, then automatically switch off hdfs checksum verification.<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    boolean useHBaseChecksum = conf.getBoolean(HConstants.HBASE_CHECKSUM_VERIFICATION, true);<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    FSUtils.setFsDefault(this.conf, FSUtils.getWALRootDir(this.conf));<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    this.walFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    this.walRootDir = FSUtils.getWALRootDir(this.conf);<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    // Set 'fs.defaultFS' to match the filesystem on hbase.rootdir else<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    // underlying hadoop hdfs accessors will be going against wrong filesystem<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    // (unless all is set to defaults).<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    FSUtils.setFsDefault(this.conf, FSUtils.getRootDir(this.conf));<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    this.fs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    this.rootDir = FSUtils.getRootDir(this.conf);<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    this.tableDescriptors = getFsTableDescriptors();<a name="line.712"></a>
-<span class="sourceLineNo">713</span>  }<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span>  protected TableDescriptors getFsTableDescriptors() throws IOException {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    return new FSTableDescriptors(this.conf,<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      this.fs, this.rootDir, !canUpdateTableDescriptor(), false, getMetaTableObserver());<a name="line.717"></a>
-<span class="sourceLineNo">718</span>  }<a name="line.718"></a>
-<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>  protected Function&lt;TableDescriptorBuilder, TableDescriptorBuilder&gt; getMetaTableObserver() {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    return null;<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  }<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    user.login("hbase.regionserver.keytab.file",<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      "hbase.regionserver.kerberos.principal", host);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>  }<a name="line.727"></a>
+<span class="sourceLineNo">601</span>          this instanceof HMaster &amp;&amp; !LoadBalancer.isTablesOnMaster(conf);<a name="line.601"></a>
+<span class="sourceLineNo">602</span>      cacheConfig = new CacheConfig(conf, !isMasterNotCarryTable);<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      mobCacheConfig = new MobCacheConfig(conf, !isMasterNotCarryTable);<a name="line.603"></a>
+<span class="sourceLineNo">604</span>      uncaughtExceptionHandler = new UncaughtExceptionHandler() {<a name="line.604"></a>
+<span class="sourceLineNo">605</span>        @Override<a name="line.605"></a>
+<span class="sourceLineNo">606</span>        public void uncaughtException(Thread t, Throwable e) {<a name="line.606"></a>
+<span class="sourceLineNo">607</span>          abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.607"></a>
+<span class="sourceLineNo">608</span>        }<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      };<a name="line.609"></a>
+<span class="sourceLineNo">610</span><a name="line.610"></a>
+<span class="sourceLineNo">611</span>      initializeFileSystem();<a name="line.611"></a>
+<span class="sourceLineNo">612</span>      spanReceiverHost = SpanReceiverHost.getInstance(getConfiguration());<a name="line.612"></a>
+<span class="sourceLineNo">613</span><a name="line.613"></a>
+<span class="sourceLineNo">614</span>      this.configurationManager = new ConfigurationManager();<a name="line.614"></a>
+<span class="sourceLineNo">615</span>      setupWindows(getConfiguration(), getConfigurationManager());<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span>      // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.617"></a>
+<span class="sourceLineNo">618</span>      if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>        // Open connection to zookeeper and set primary watcher<a name="line.619"></a>
+<span class="sourceLineNo">620</span>        zooKeeper = new ZKWatcher(conf, getProcessName() + ":" +<a name="line.620"></a>
+<span class="sourceLineNo">621</span>          rpcServices.isa.getPort(), this, canCreateBaseZNode());<a name="line.621"></a>
+<span class="sourceLineNo">622</span>        // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.622"></a>
+<span class="sourceLineNo">623</span>        if (!this.masterless) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>          this.csm = new ZkCoordinatedStateManager(this);<a name="line.624"></a>
+<span class="sourceLineNo">625</span><a name="line.625"></a>
+<span class="sourceLineNo">626</span>          masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.626"></a>
+<span class="sourceLineNo">627</span>          masterAddressTracker.start();<a name="line.627"></a>
+<span class="sourceLineNo">628</span><a name="line.628"></a>
+<span class="sourceLineNo">629</span>          clusterStatusTracker = new ClusterStatusTracker(zooKeeper, this);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>          clusterStatusTracker.start();<a name="line.630"></a>
+<span class="sourceLineNo">631</span>        } else {<a name="line.631"></a>
+<span class="sourceLineNo">632</span>          masterAddressTracker = null;<a name="line.632"></a>
+<span class="sourceLineNo">633</span>          clusterStatusTracker = null;<a name="line.633"></a>
+<span class="sourceLineNo">634</span>        }<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      } else {<a name="line.635"></a>
+<span class="sourceLineNo">636</span>        zooKeeper = null;<a name="line.636"></a>
+<span class="sourceLineNo">637</span>        masterAddressTracker = null;<a name="line.637"></a>
+<span class="sourceLineNo">638</span>        clusterStatusTracker = null;<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      }<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      this.rpcServices.start(zooKeeper);<a name="line.640"></a>
+<span class="sourceLineNo">641</span>      // This violates 'no starting stuff in Constructor' but Master depends on the below chore<a name="line.641"></a>
+<span class="sourceLineNo">642</span>      // and executor being created and takes a different startup route. Lots of overlap between HRS<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      // and M (An M IS A HRS now). Need to refactor so less duplication between M and its super<a name="line.643"></a>
+<span class="sourceLineNo">644</span>      // Master expects Constructor to put up web servers. Ugh.<a name="line.644"></a>
+<span class="sourceLineNo">645</span>      // class HRS. TODO.<a name="line.645"></a>
+<span class="sourceLineNo">646</span>      this.choreService = new ChoreService(getName(), true);<a name="line.646"></a>
+<span class="sourceLineNo">647</span>      this.executorService = new ExecutorService(getName());<a name="line.647"></a>
+<span class="sourceLineNo">648</span>      putUpWebUI();<a name="line.648"></a>
+<span class="sourceLineNo">649</span>    } catch (Throwable t) {<a name="line.649"></a>
+<span class="sourceLineNo">650</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      // cause of failed startup is lost.<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      LOG.error("Failed construction RegionServer", t);<a name="line.652"></a>
+<span class="sourceLineNo">653</span>      throw t;<a name="line.653"></a>
+<span class="sourceLineNo">654</span>    }<a name="line.654"></a>
+<span class="sourceLineNo">655</span>  }<a name="line.655"></a>
+<span class="sourceLineNo">656</span><a name="line.656"></a>
+<span class="sourceLineNo">657</span>  // HMaster should override this method to load the specific config for master<a name="line.657"></a>
+<span class="sourceLineNo">658</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.658"></a>
+<span class="sourceLineNo">659</span>    String hostname = conf.get(RS_HOSTNAME_KEY);<a name="line.659"></a>
+<span class="sourceLineNo">660</span>    if (conf.getBoolean(RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>        String msg = RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and " + RS_HOSTNAME_KEY +<a name="line.662"></a>
+<span class="sourceLineNo">663</span>          " are mutually exclusive. Do not set " + RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY +<a name="line.663"></a>
+<span class="sourceLineNo">664</span>          " to true while " + RS_HOSTNAME_KEY + " is used";<a name="line.664"></a>
+<span class="sourceLineNo">665</span>        throw new IOException(msg);<a name="line.665"></a>
+<span class="sourceLineNo">666</span>      } else {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>        return rpcServices.isa.getHostName();<a name="line.667"></a>
+<span class="sourceLineNo">668</span>      }<a name="line.668"></a>
+<span class="sourceLineNo">669</span>    } else {<a name="line.669"></a>
+<span class="sourceLineNo">670</span>      return hostname;<a name="line.670"></a>
+<span class="sourceLineNo">671</span>    }<a name="line.671"></a>
+<span class="sourceLineNo">672</span>  }<a name="line.672"></a>
+<span class="sourceLineNo">673</span><a name="line.673"></a>
+<span class="sourceLineNo">674</span>  /**<a name="line.674"></a>
+<span class="sourceLineNo">675</span>   * If running on Windows, do windows-specific setup.<a name="line.675"></a>
+<span class="sourceLineNo">676</span>   */<a name="line.676"></a>
+<span class="sourceLineNo">677</span>  private static void setupWindows(final Configuration conf, ConfigurationManager cm) {<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    if (!SystemUtils.IS_OS_WINDOWS) {<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      Signal.handle(new Signal("HUP"), new SignalHandler() {<a name="line.679"></a>
+<span class="sourceLineNo">680</span>        @Override<a name="line.680"></a>
+<span class="sourceLineNo">681</span>        public void handle(Signal signal) {<a name="line.681"></a>
+<span class="sourceLineNo">682</span>          conf.reloadConfiguration();<a name="line.682"></a>
+<span class="sourceLineNo">683</span>          cm.notifyAllObservers(conf);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>        }<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      });<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 static NettyEventLoopGroupConfig setupNetty(Configuration conf) {<a name="line.689"></a>
+<span class="sourceLineNo">690</span>    // Initialize netty event loop group at start as we may use it for rpc server, rpc client &amp; WAL.<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    NettyEventLoopGroupConfig nelgc =<a name="line.691"></a>
+<span class="sourceLineNo">692</span>      new NettyEventLoopGroupConfig(conf, "RS-EventLoopGroup");<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    NettyRpcClientConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    NettyAsyncFSWALConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    return nelgc;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>  }<a name="line.696"></a>
+<span class="sourceLineNo">697</span><a name="line.697"></a>
+<span class="sourceLineNo">698</span>  private void initializeFileSystem() throws IOException {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>    // Get fs instance used by this RS.  Do we use checksum verification in the hbase? If hbase<a name="line.699"></a>
+<span class="sourceLineNo">700</span>    // checksum verification enabled, then automatically switch off hdfs checksum verification.<a name="line.700"></a>
+<span class="sourceLineNo">701</span>    boolean useHBaseChecksum = conf.getBoolean(HConstants.HBASE_CHECKSUM_VERIFICATION, true);<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    FSUtils.setFsDefault(this.conf, FSUtils.getWALRootDir(this.conf));<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    this.walFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>    this.walRootDir = FSUtils.getWALRootDir(this.conf);<a name="line.704"></a>
+<span class="sourceLineNo">705</span>    // Set 'fs.defaultFS' to match the filesystem on hbase.rootdir else<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    // underlying hadoop hdfs accessors will be going against wrong filesystem<a name="line.706"></a>
+<span class="sourceLineNo">707</span>    // (unless all is set to defaults).<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    FSUtils.setFsDefault(this.conf, FSUtils.getRootDir(this.conf));<a name="line.708"></a>
+<span class="sourceLineNo">709</span>    this.fs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.709"></a>
+<span class="sourceLineNo">710</span>    this.rootDir = FSUtils.getRootDir(this.conf);<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    this.tableDescriptors = getFsTableDescriptors();<a name="line.711"></a>
+<span class="sourceLineNo">712</span>  }<a name="line.712"></a>
+<span class="sourceLineNo">713</span><a name="line.713"></a>
+<span class="sourceLineNo">714</span>  protected TableDescriptors getFsTableDescriptors() throws IOException {<a name="line.714"></a>
+<span class="sourceLineNo">715</span>    return new FSTableDescriptors(this.conf,<a name="line.715"></a>
+<span class="sourceLineNo">716</span>      this.fs, this.rootDir, !canUpdateTableDescriptor(), false, getMetaTableObserver());<a name="line.716"></a>
+<span class="sourceLineNo">717</span>  }<a name="line.717"></a>
+<span class="sourceLineNo">718</span><a name="line.718"></a>
+<span class="sourceLineNo">719</span>  protected Function&lt;TableDescriptorBuilder, TableDescriptorBuilder&gt; getMetaTableObserver() {<a name="line.719"></a>
+<span class="sourceLineNo">720</span>    return null;<a name="line.720"></a>
+<span class="sourceLineNo">721</span>  }<a name="line.721"></a>
+<span class="sourceLineNo">722</span><a name="line.722"></a>
+<span class="sourceLineNo">723</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.723"></a>
+<span class="sourceLineNo">724</span>    user.login("hbase.regionserver.keytab.file",<a name="line.724"></a>
+<span class="sourceLineNo">725</span>      "hbase.regionserver.kerberos.principal", host);<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><a name="line.729"></a>
-<span class="sourceLineNo">730</span>  /**<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * Wait for an active Master.<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   * See override in Master superclass for how it is used.<a name="line.732"></a>
-<span class="sourceLineNo">733</span>   */<a name="line.733"></a>
-<span class="sourceLineNo">734</span>  protected void waitForMasterActive() {}<a name="line.734"></a>
-<span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>  protected String getProcessName() {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    return REGIONSERVER;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  protected boolean canCreateBaseZNode() {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    return this.masterless;<a name="line.741"></a>
-<span class="sourceLineNo">742</span>  }<a name="line.742"></a>
-<span class="sourceLineNo">743</span><a name="line.743"></a>
-<span class="sourceLineNo">744</span>  protected boolean canUpdateTableDescriptor() {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    return false;<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
-<span class="sourceLineNo">747</span><a name="line.747"></a>
-<span class="sourceLineNo">748</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    return new RSRpcServices(this);<a name="line.749"></a>
-<span class="sourceLineNo">750</span>  }<a name="line.750"></a>
-<span class="sourceLineNo">751</span><a name="line.751"></a>
-<span class="sourceLineNo">752</span>  protected void configureInfoServer() {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    infoServer.addServlet("rs-status", "/rs-status", RSStatusServlet.class);<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    infoServer.setAttribute(REGIONSERVER, this);<a name="line.754"></a>
-<span class="sourceLineNo">755</span>  }<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    return RSDumpServlet.class;<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>  @Override<a name="line.761"></a>
-<span class="sourceLineNo">762</span>  public boolean registerService(com.google.protobuf.Service instance) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    /*<a name="line.763"></a>
-<span class="sourceLineNo">764</span>     * No stacking of instances is allowed for a single executorService name<a name="line.764"></a>
-<span class="sourceLineNo">765</span>     */<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    com.google.protobuf.Descriptors.ServiceDescriptor serviceDesc =<a name="line.766"></a>
-<span class="sourceLineNo">767</span>        instance.getDescriptorForType();<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      LOG.error("Coprocessor executorService " + serviceName<a name="line.770"></a>
-<span class="sourceLineNo">771</span>          + " already registered, rejecting request from " + instance);<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      return false;<a name="line.772"></a>
-<span class="sourceLineNo">773</span>    }<a name="line.773"></a>
-<span class="sourceLineNo">774</span><a name="line.774"></a>
-<span class="sourceLineNo">775</span>    coprocessorServiceHandlers.put(serviceName, instance);<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    if (LOG.isDebugEnabled()) {<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      LOG.debug("Registered regionserver coprocessor executorService: executorService=" + serviceName);<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    }<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    return true;<a name="line.779"></a>
-<span class="sourceLineNo">780</span>  }<a name="line.780"></a>
-<span class="sourceLineNo">781</span><a name="line.781"></a>
-<span class="sourceLineNo">782</span>  /**<a name="line.782"></a>
-<span class="sourceLineNo">783</span>   * Create a 'smarter' Connection, one that is capable of by-passing RPC if the request is to<a name="line.783"></a>
-<span class="sourceLineNo">784</span>   * the local server; i.e. a short-circuit Connection. Safe to use going to local or remote<a name="line.784"></a>
-<span class="sourceLineNo">785</span>   * server. Create this instance in a method can be intercepted and mocked in tests.<a name="line.785"></a>
-<span class="sourceLineNo">786</span>   * @throws IOException<a name="line.786"></a>
-<span class="sourceLineNo">787</span>   */<a name="line.787"></a>
-<span class="sourceLineNo">788</span>  @VisibleForTesting<a name="line.788"></a>
-<span class="sourceLineNo">789</span>  protected ClusterConnection createClusterConnection() throws IOException {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    Configuration conf = this.conf;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    if (conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM) != null) {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      // Use server ZK cluster for server-issued connections, so we clone<a name="line.792"></a>
-<span class="sourceLineNo">793</span>      // the conf and unset the client ZK related properties<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      conf = new Configuration(this.conf);<a name="line.794"></a>
-<span class="sourceLineNo">795</span>      conf.unset(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>    }<a name="line.796"></a>
-<span class="sourceLineNo">797</span>    // Create a cluster connection that when appropriate, can short-circuit and go directly to the<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    // local server if the request is to the local server bypassing RPC. Can be used for both local<a name="line.798"></a>
-<span class="sourceLineNo">799</span>    // and remote invocations.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    return ConnectionUtils.createShortCircuitConnection(conf, null, userProvider.getCurrent(),<a name="line.800"></a>
-<span class="sourceLineNo">801</span>      serverName, rpcServices, rpcServices);<a name="line.801"></a>
-<span class="sourceLineNo">802</span>  }<a name="line.802"></a>
-<span class="sourceLineNo">803</span><a name="line.803"></a>
-<span class="sourceLineNo">804</span>  /**<a name="line.804"></a>
-<span class="sourceLineNo">805</span>   * Run test on configured codecs to make sure supporting libs are in place.<a name="line.805"></a>
-<span class="sourceLineNo">806</span>   * @param c<a name="line.806"></a>
-<span class="sourceLineNo">807</span>   * @throws IOException<a name="line.807"></a>
-<span class="sourceLineNo">808</span>   */<a name="line.808"></a>
-<span class="sourceLineNo">809</span>  private static void checkCodecs(final Configuration c) throws IOException {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    // check to see if the codec list is available:<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    String [] codecs = c.getStrings("hbase.regionserver.codecs", (String[])null);<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    if (codecs == null) return;<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    for (String codec : codecs) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>      if (!CompressionTest.testCompression(codec)) {<a name="line.814"></a>
-<span class="sourceLineNo">815</span>        throw new IOException("Compression codec " + codec +<a name="line.815"></a>
-<span class="sourceLineNo">816</span>          " not supported, aborting RS construction");<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      }<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
-<span class="sourceLineNo">819</span>  }<a name="line.819"></a>
-<span class="sourceLineNo">820</span><a name="line.820"></a>
-<span class="sourceLineNo">821</span>  public String getClusterId() {<a name="line.821"></a>
-<span class="sourceLineNo">822</span>    return this.clusterId;<a name="line.822"></a>
-<span class="sourceLineNo">823</span>  }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>  /**<a name="line.825"></a>
-<span class="sourceLineNo">826</span>   * Setup our cluster connection if not already initialized.<a name="line.826"></a>
-<span class="sourceLineNo">827</span>   * @throws IOException<a name="line.827"></a>
-<span class="sourceLineNo">828</span>   */<a name="line.828"></a>
-<span class="sourceLineNo">829</span>  protected synchronized void setupClusterConnection() throws IOException {<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    if (clusterConnection == null) {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>      clusterConnection = createClusterConnection();<a name="line.831"></a>
-<span class="sourceLineNo">832</span>      metaTableLocator = new MetaTableLocator();<a name="line.832"></a>
-<span class="sourceLineNo">833</span>    }<a name="line.833"></a>
-<span class="sourceLineNo">834</span>  }<a name="line.834"></a>
-<span class="sourceLineNo">835</span><a name="line.835"></a>
-<span class="sourceLineNo">836</span>  /**<a name="line.836"></a>
-<span class="sourceLineNo">837</span>   * All initialization needed before we go register with Master.&lt;br&gt;<a name="line.837"></a>
-<span class="sourceLineNo">838</span>   * Do bare minimum. Do bulk of initializations AFTER we've connected to the Master.&lt;br&gt;<a name="line.838"></a>
-<span class="sourceLineNo">839</span>   * In here we just put up the RpcServer, setup Connection, and ZooKeeper.<a name="line.839"></a>
-<span class="sourceLineNo">840</span>   */<a name="line.840"></a>
-<span class="sourceLineNo">841</span>  private void preRegistrationInitialization() {<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    try {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      initializeZooKeeper();<a name="line.843"></a>
-<span class="sourceLineNo">844</span>      setupClusterConnection();<a name="line.844"></a>
-<span class="sourceLineNo">845</span>      // Setup RPC client for master communication<a name="line.845"></a>
-<span class="sourceLineNo">846</span>      this.rpcClient = RpcClientFactory.createClient(conf, clusterId, new InetSocketAddress(<a name="line.846"></a>
-<span class="sourceLineNo">847</span>          this.rpcServices.isa.getAddress(), 0), clusterConnection.getConnectionMetrics());<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    } catch (Throwable t) {<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      // Call stop if error or process will stick around for ever since server<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      // puts up non-daemon threads.<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      this.rpcServices.stop();<a name="line.851"></a>
-<span class="sourceLineNo">852</span>      abort("Initialization of RS failed.  Hence aborting RS.", t);<a name="line.852"></a>
-<span class="sourceLineNo">853</span>    }<a name="line.853"></a>
-<span class="sourceLineNo">854</span>  }<a name="line.854"></a>
-<span class="sourceLineNo">855</span><a name="line.855"></a>
-<span class="sourceLineNo">856</span>  /**<a name="line.856"></a>
-<span class="sourceLineNo">857</span>   * Bring up connection to zk ensemble and then wait until a master for this cluster and then after<a name="line.857"></a>
-<span class="sourceLineNo">858</span>   * that, wait until cluster 'up' flag has been set. This is the order in which master does things.<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * &lt;p&gt;<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * Finally open long-living server short-circuit connection.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   */<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE",<a name="line.862"></a>
-<span class="sourceLineNo">863</span>    justification="cluster Id znode read would give us correct response")<a name="line.863"></a>
-<span class="sourceLineNo">864</span>  private void initializeZooKeeper() throws IOException, InterruptedException {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>    // Nothing to do in here if no Master in the mix.<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    if (this.masterless) {<a name="line.866"></a>
-<span class="sourceLineNo">867</span>      return;<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    }<a name="line.868"></a>
-<span class="sourceLineNo">869</span><a name="line.869"></a>
-<span class="sourceLineNo">870</span>    // Create the master address tracker, register with zk, and start it.  Then<a name="line.870"></a>
-<span class="sourceLineNo">871</span>    // block until a master is available.  No point in starting up if no master<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    // running.<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    blockAndCheckIfStopped(this.masterAddressTracker);<a name="line.873"></a>
-<span class="sourceLineNo">874</span><a name="line.874"></a>
-<span class="sourceLineNo">875</span>    // Wait on cluster being up.  Master will set this flag up in zookeeper<a name="line.875"></a>
-<span class="sourceLineNo">876</span>    // when ready.<a name="line.876"></a>
-<span class="sourceLineNo">877</span>    blockAndCheckIfStopped(this.clusterStatusTracker);<a name="line.877"></a>
-<span class="sourceLineNo">878</span><a name="line.878"></a>
-<span class="sourceLineNo">879</span>    // If we are HMaster then the cluster id should have already been set.<a name="line.879"></a>
-<span class="sourceLineNo">880</span>    if (clusterId == null) {<a name="line.880"></a>
-<span class="sourceLineNo">881</span>      // Retrieve clusterId<a name="line.881"></a>
-<span class="sourceLineNo">882</span>      // Since cluster status is now up<a name="line.882"></a>
-<span class="sourceLineNo">883</span>      // ID should have already been set by HMaster<a name="line.883"></a>
-<span class="sourceLineNo">884</span>      try {<a name="line.884"></a>
-<span class="sourceLineNo">885</span>        clusterId = ZKClusterId.readClusterIdZNode(this.zooKeeper);<a name="line.885"></a>
-<span class="sourceLineNo">886</span>        if (clusterId == null) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>          this.abort("Cluster ID has not been set");<a name="line.887"></a>
-<span class="sourceLineNo">888</span>        }<a name="line.888"></a>
-<span class="sourceLineNo">889</span>        LOG.info("ClusterId : " + clusterId);<a name="line.889"></a>
-<span class="sourceLineNo">890</span>      } catch (KeeperException e) {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>        this.abort("Failed to retrieve Cluster ID", e);<a name="line.891"></a>
-<span class="sourceLineNo">892</span>      }<a name="line.892"></a>
-<span class="sourceLineNo">893</span>    }<a name="line.893"></a>
-<span class="sourceLineNo">894</span><a name="line.894"></a>
-<span class="sourceLineNo">895</span>    waitForMasterActive();<a name="line.895"></a>
-<span class="sourceLineNo">896</span>    if (isStopped() || isAborted()) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      return; // No need for further initialization<a name="line.897"></a>
-<span class="sourceLineNo">898</span>    }<a name="line.898"></a>
-<span class="sourceLineNo">899</span><a name="line.899"></a>
-<span class="sourceLineNo">900</span>    // watch for snapshots and other procedures<a name="line.900"></a>
-<span class="sourceLineNo">901</span>    try {<a name="line.901"></a>
-<span class="sourceLineNo">902</span>      rspmHost = new RegionServerProcedureManagerHost();<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      rspmHost.loadProcedures(conf);<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      rspmHost.initialize(this);<a name="line.904"></a>
-<span class="sourceLineNo">905</span>    } catch (KeeperException e) {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>      this.abort("Failed to reach coordination cluster when creating procedure handler.", e);<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><a name="line.909"></a>
-<span class="sourceLineNo">910</span>  /**<a name="line.910"></a>
-<span class="sourceLineNo">911</span>   * Utilty method to wait indefinitely on a znode availability while checking<a name="line.911"></a>
-<span class="sourceLineNo">912</span>   * if the region server is shut down<a name="line.912"></a>
-<span class="sourceLineNo">913</span>   * @param tracker znode tracker to use<a name="line.913"></a>
-<span class="sourceLineNo">914</span>   * @throws IOException any IO exception, plus if the RS is stopped<a name="line.914"></a>
-<span class="sourceLineNo">915</span>   * @throws InterruptedException<a name="line.915"></a>
-<span class="sourceLineNo">916</span>   */<a name="line.916"></a>
-<span class="sourceLineNo">917</span>  private void blockAndCheckIfStopped(ZKNodeTracker tracker)<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      throws IOException, InterruptedException {<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    while (tracker.blockUntilAvailable(this.msgInterval, false) == null) {<a name="line.919"></a>
-<span class="sourceLineNo">920</span>      if (this.stopped) {<a name="line.920"></a>
-<span class="sourceLineNo">921</span>        throw new IOException("Received the shutdown message while waiting.");<a name="line.921"></a>
-<span class="sourceLineNo">922</span>      }<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    }<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  }<a name="line.924"></a>
-<span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>  /**<a name="line.926"></a>
-<span class="sourceLineNo">927</span>   * @return True if the cluster is up.<a name="line.927"></a>
-<span class="sourceLineNo">928</span>   */<a name="line.928"></a>
-<span class="sourceLineNo">929</span>  @Override<a name="line.929"></a>
-<span class="sourceLineNo">930</span>  public boolean isClusterUp() {<a name="line.930"></a>
-<span class="sourceLineNo">931</span>    return this.masterless ||<a name="line.931"></a>
-<span class="sourceLineNo">932</span>        (this.clusterStatusTracker != null &amp;&amp; this.clusterStatusTracker.isClusterUp());<a name="line.932"></a>
-<span class="sourceLineNo">933</span>  }<a name="line.933"></a>
-<span class="sourceLineNo">934</span><a name="line.934"></a>
-<span class="sourceLineNo">935</span>  /**<a name="line.935"></a>
-<span class="sourceLineNo">936</span>   * The HRegionServer sticks in this loop until closed.<a name="line.936"></a>
-<span class="sourceLineNo">937</span>   */<a name="line.937"></a>
-<span class="sourceLineNo">938</span>  @Override<a name="line.938"></a>
-<span class="sourceLineNo">939</span>  public void run() {<a name="line.939"></a>
-<span class="sourceLineNo">940</span>    try {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>      // Do pre-registration initializations; zookeeper, lease threads, etc.<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      preRegistrationInitialization();<a name="line.942"></a>
-<span class="sourceLineNo">943</span>    } catch (Throwable e) {<a name="line.943"></a>
-<span class="sourceLineNo">944</span>      abort("Fatal exception during initialization", e);<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    }<a name="line.945"></a>
-<span class="sourceLineNo">946</span><a name="line.946"></a>
-<span class="sourceLineNo">947</span>    try {<a name="line.947"></a>
-<span class="sourceLineNo">948</span>      if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.948"></a>
-<span class="sourceLineNo">949</span>        ShutdownHook.install(conf, fs, this, Thread.currentThread());<a name="line.949"></a>
-<span class="sourceLineNo">950</span>        // Initialize the RegionServerCoprocessorHost now that our ephemeral<a name="line.950"></a>
-<span class="sourceLineNo">951</span>        // node was created, in case any coprocessors want to use ZooKeeper<a name="line.951"></a>
-<span class="sourceLineNo">952</span>        this.rsHost = new RegionServerCoprocessorHost(this, this.conf);<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      }<a name="line.953"></a>
-<span class="sourceLineNo">954</span><a name="line.954"></a>
-<span class="sourceLineNo">955</span>      // Try and register with the Master; tell it we are here.  Break if server is stopped or the<a name="line.955"></a>
-<span class="sourceLineNo">956</span>      // clusterup flag is down or hdfs went wacky. Once registered successfully, go ahead and start<a name="line.956"></a>
-<span class="sourceLineNo">957</span>      // up all Services. Use RetryCounter to get backoff in case Master is struggling to come up.<a name="line.957"></a>
-<span class="sourceLineNo">958</span>      LOG.debug("About to register with Master.");<a name="line.958"></a>
-<span class="sourceLineNo">959</span>      RetryCounterFactory rcf = new RetryCounterFactory(Integer.MAX_VALUE,<a name="line.959"></a>
-<span class="sourceLineNo">960</span>          this.sleeper.getPeriod(), 1000 * 60 * 5);<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      RetryCounter rc = rcf.create();<a name="line.961"></a>
-<span class="sourceLineNo">962</span>      while (keepLooping()) {<a name="line.962"></a>
-<span class="sourceLineNo">963</span>        RegionServerStartupResponse w = reportForDuty();<a name="line.963"></a>
-<span class="sourceLineNo">964</span>        if (w == null) {<a name="line.964"></a>
-<span class="sourceLineNo">965</span>          long sleepTime = rc.getBackoffTimeAndIncrementAttempts();<a name="line.965"></a>
-<span class="sourceLineNo">966</span>          LOG.warn("reportForDuty failed; sleeping {} ms and then retrying.", sleepTime);<a name="line.966"></a>
-<span class="sourceLineNo">967</span>          this.sleeper.sleep(sleepTime);<a name="line.967"></a>
-<span class="sourceLineNo">968</span>        } else {<a name="line.968"></a>
-<span class="sourceLineNo">969</span>          handleReportForDutyResponse(w);<a name="line.969"></a>
-<span class="sourceLineNo">970</span>          break;<a name="line.970"></a>
-<span class="sourceLineNo">971</span>        }<a name="line.971"></a>
-<span class="sourceLineNo">972</span>      }<a name="line.972"></a>
-<span class="sourceLineNo">973</span><a name="line.973"></a>
-<span class="sourceLineNo">974</span>      if (!isStopped() &amp;&amp; isHealthy()) {<a name="line.974"></a>
-<span class="sourceLineNo">975</span>        // start the snapshot handler and other procedure handlers,<a name="line.975"></a>
-<span class="sourceLineNo">976</span>        // since the server is ready to run<a name="line.976"></a>
-<span class="sourceLineNo">977</span>        if (this.rspmHost != null) {<a name="line.977"></a>
-<span class="sourceLineNo">978</span>          this.rspmHost.start();<a name="line.978"></a>
-<span class="sourceLineNo">979</span>        }<a name="line.979"></a>
-<span class="sourceLineNo">980</span>        // Start the Quota Manager<a name="line.980"></a>
-<span class="sourceLineNo">981</span>        if (this.rsQuotaManager != null) {<a name="line.981"></a>
-<span class="sourceLineNo">982</span>          rsQuotaManager.start(getRpcServer().getScheduler());<a name="line.982"></a>
-<span class="sourceLineNo">983</span>        }<a name="line.983"></a>
-<span class="sourceLineNo">984</span>        if (this.rsSpaceQuotaManager != null) {<a name="line.984"></a>
-<span class="sourceLineNo">985</span>          this.rsSpaceQuotaManager.start();<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        }<a name="line.986"></a>
-<span class="sourceLineNo">987</span>      }<a name="line.987"></a>
-<span class="sourceLineNo">988</span><a name="line.988"></a>
-<span class="sourceLineNo">989</span>      // We registered with the Master.  Go into run mode.<a name="line.989"></a>
-<span class="sourceLineNo">990</span>      long lastMsg = System.currentTimeMillis();<a name="line.990"></a>
-<span class="sourceLineNo">991</span>      long oldRequestCount = -1;<a name="line.991"></a>
-<span class="sourceLineNo">992</span>      // The main run loop.<a name="line.992"></a>
-<span class="sourceLineNo">993</span>      while (!isStopped() &amp;&amp; isHealthy()) {<a name="line.993"></a>
-<span class="sourceLineNo">994</span>        if (!isClusterUp()) {<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          if (isOnlineRegionsEmpty()) {<a name="line.995"></a>
-<span class="sourceLineNo">996</span>            stop("Exiting; cluster shutdown set and not carrying any regions");<a name="line.996"></a>
-<span class="sourceLineNo">997</span>          } else if (!this.stopping) {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>            this.stopping = true;<a name="line.998"></a>
-<span class="sourceLineNo">999</span>            LOG.info("Closing user regions");<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>            closeUserRegions(this.abortRequested);<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>          } else if (this.stopping) {<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>            boolean allUserRegionsOffline = areAllUserRegionsOffline();<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>            if (allUserRegionsOffline) {<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>              // Set stopped if no more write requests tp meta tables<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>              // since last time we went around the loop.  Any open<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>              // meta regions will be closed on our way out.<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>              if (oldRequestCount == getWriteRequestCount()) {<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>                stop("Stopped; only catalog regions remaining online");<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>                break;<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>              }<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>              oldRequestCount = getWriteRequestCount();<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>            } else {<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>              // Make sure all regions have been closed -- some regions may<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>              // have not got it because we were splitting at the time of<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>              // the call to closeUserRegions.<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>              closeUserRegions(this.abortRequested);<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>            }<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>            LOG.debug("Waiting on " + getOnlineRegionsAsPrintableString());<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>          }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>        }<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>        long now = System.currentTimeMillis();<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>        if ((now - lastMsg) &gt;= msgInterval) {<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>          tryRegionServerReport(lastMsg, now);<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>          lastMsg = System.currentTimeMillis();<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>        }<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>        if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>          this.sleeper.sleep();<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>        }<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>      } // for<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    } catch (Throwable t) {<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      if (!rpcServices.checkOOME(t)) {<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>        String prefix = t instanceof YouAreDeadException? "": "Unhandled: ";<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        abort(prefix + t.getMessage(), t);<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      }<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>    }<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span><a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>    if (abortRequested) {<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>      Timer abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      TimerTask abortTimeoutTask = null;<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>      try {<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>        abortTimeoutTask =<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>            Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>                .asSubclass(TimerTask.class).getDeclaredConstructor().newInstance();<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>      } catch (Exception e) {<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>      }<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>      if (abortTimeoutTask != null) {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>      }<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span><a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    if (this.leases != null) {<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>      this.leases.closeAfterLeasesExpire();<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>    }<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    if (this.splitLogWorker != null) {<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>      splitLogWorker.stop();<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    }<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    if (this.infoServer != null) {<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      LOG.info("Stopping infoServer");<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      try {<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>        this.infoServer.stop();<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>      } catch (Exception e) {<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>        LOG.error("Failed to stop infoServer", e);<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>      }<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    }<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    // Send cache a shutdown.<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    if (cacheConfig != null &amp;&amp; cacheConfig.isBlockCacheEnabled()) {<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>      cacheConfig.getBlockCache().shutdown();<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>    }<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    mobCacheConfig.getMobFileCache().shutdown();<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span><a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    if (movedRegionsCleaner != null) {<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>      movedRegionsCleaner.stop("Region Server stopping");<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>    // Send interrupts to wake up threads if sleeping so they notice shutdown.<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    // TODO: Should we check they are alive? If OOME could have exited already<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>    if (this.hMemManager != null) this.hMemManager.stop();<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    if (this.cacheFlusher != null) this.cacheFlusher.interruptIfNecessary();<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    if (this.compactSplitThread != null) this.compactSplitThread.interruptIfNecessary();<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>    sendShutdownInterrupt();<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span><a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>    // Stop the snapshot and other procedure handlers, forcefully killing all running tasks<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>    if (rspmHost != null) {<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>      rspmHost.stop(this.abortRequested || this.killed);<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    }<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span><a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    if (this.killed) {<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>      // Just skip out w/o closing regions.  Used when testing.<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    } else if (abortRequested) {<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>      if (this.fsOk) {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>        closeUserRegions(abortRequested); // Don't leave any open file handles<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      }<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>      LOG.info("aborting server " + this.serverName);<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    } else {<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      closeUserRegions(abortRequested);<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>      LOG.info("stopping server " + this.serverName);<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>    // so callers waiting for meta without timeout can stop<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    if (this.metaTableLocator != null) this.metaTableLocator.stop();<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    if (this.clusterConnection != null &amp;&amp; !clusterConnection.isClosed()) {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>      try {<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>        this.clusterConnection.close();<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>      } catch (IOException e) {<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>        // Although the {@link Closeable} interface throws an {@link<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>        // IOException}, in reality, the implementation would never do that.<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>        LOG.warn("Attempt to close server's short circuit ClusterConnection failed.", e);<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      }<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    }<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span><a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>    // Closing the compactSplit thread before closing meta regions<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>    if (!this.killed &amp;&amp; containsMetaTableRegions()) {<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>      if (!abortRequested || this.fsOk) {<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>        if (this.compactSplitThread != null) {<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>          this.compactSplitThread.join();<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>          this.compactSplitThread = null;<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>        }<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>        closeMetaTableRegions(abortRequested);<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>      }<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>    }<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span><a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    if (!this.killed &amp;&amp; this.fsOk) {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>      waitOnAllRegionsToClose(abortRequested);<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>      LOG.info("stopping server " + this.serverName + "; all regions closed.");<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>    // Stop the quota manager<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    if (rsQuotaManager != null) {<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>      rsQuotaManager.stop();<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    }<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    if (rsSpaceQuotaManager != null) {<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>      rsSpaceQuotaManager.stop();<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>      rsSpaceQuotaManager = null;<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>    //fsOk flag may be changed when closing regions throws exception.<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>    if (this.fsOk) {<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>      shutdownWAL(!abortRequested);<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>    // Make sure the proxy is down.<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    if (this.rssStub != null) {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>      this.rssStub = null;<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>    }<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    if (this.lockStub != null) {<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>      this.lockStub = null;<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>    }<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    if (this.rpcClient != null) {<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>      this.rpcClient.close();<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    }<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>    if (this.leases != null) {<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>      this.leases.close();<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>    }<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>    if (this.pauseMonitor != null) {<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>      this.pauseMonitor.stop();<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    }<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span><a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    if (!killed) {<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      stopServiceThreads();<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>    if (this.rpcServices != null) {<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      this.rpcServices.stop();<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>    try {<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>      deleteMyEphemeralNode();<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    } catch (KeeperException.NoNodeException nn) {<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>    } catch (KeeperException e) {<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>      LOG.warn("Failed deleting my ephemeral node", e);<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>    }<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    // We may have failed to delete the znode at the previous step, but<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>    //  we delete the file anyway: a second attempt to delete the znode is likely to fail again.<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    ZNodeClearer.deleteMyEphemeralNodeOnDisk();<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span><a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    if (this.zooKeeper != null) {<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>      this.zooKeeper.close();<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    }<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>    this.shutDown = true;<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>    LOG.info("Exiting; stopping=" + this.serverName + "; zookeeper connection closed.");<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>  private boolean containsMetaTableRegions() {<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    return onlineRegions.containsKey(RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedName());<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>  private boolean areAllUserRegionsOffline() {<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>    if (getNumberOfOnlineRegions() &gt; 2) return false;<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>    boolean allUserRegionsOffline = true;<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>      if (!e.getValue().getRegionInfo().isMetaRegion()) {<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>        allUserRegionsOffline = false;<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>        break;<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      }<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>    }<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>    return allUserRegionsOffline;<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>  /**<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>   * @return Current write count for all online regions.<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>   */<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>  private long getWriteRequestCount() {<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>    long writeCount = 0;<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>      writeCount += e.getValue().getWriteRequestsCount();<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>    }<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>    return writeCount;<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>  @VisibleForTesting<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>  protected void tryRegionServerReport(long reportStartTime, long reportEndTime)<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>      throws IOException {<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>    if (rss == null) {<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>      // the current server could be stopping.<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>      return;<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>    }<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>    ClusterStatusProtos.ServerLoad sl = buildServerLoad(reportStartTime, reportEndTime);<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>    try {<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>      RegionServerReportRequest.Builder request = RegionServerReportRequest.newBuilder();<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>      request.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>      request.setLoad(sl);<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>      rss.regionServerReport(null, request.build());<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>    } catch (ServiceException se) {<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>        // This will be caught and handled as a fatal error in run()<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>        throw ioe;<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>      }<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>      if (rssStub == rss) {<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>        rssStub = null;<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>      }<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>      // Method blocks until new master is found or we are stopped<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>      createRegionServerStatusStub(true);<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>    }<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>  }<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span><a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>  /**<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>   *<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>   * @param regionSizeStore The store containing region sizes<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>   */<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>    if (rss == null) {<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>      // the current server could be stopping.<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>      return true;<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    }<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>    try {<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>    } catch (ServiceException se) {<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>            + " This will be retried.", ioe);<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>        return true;<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>      }<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      if (rssStub == rss) {<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>        rssStub = null;<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>      }<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>      createRegionServerStatusStub(true);<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>            return false;<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>          }<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>        }<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>      }<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>    }<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>    return true;<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>  }<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span><a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>  /**<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>   *<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>   * @param rss The stub to send to the Master<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>   * @param regionSizeStore The store containing region sizes<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>   */<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>  void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>    RegionSpaceUseReportRequest request =<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>    // Record the number of size reports sent<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>    if (metricsRegionServer != null) {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>    }<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>  }<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span><a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>  /**<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>   *<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>   * @param regionSizes The size in bytes of regions<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>   * @return The corresponding protocol buffer message.<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>   */<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>    }<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>    return request.build();<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>  }<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span><a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>  /**<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>   * protobuf message.<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>   *<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>   * @param regionInfo The RegionInfo<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>   * @return The protocol buffer<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>   */<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>    return RegionSpaceUse.newBuilder()<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>        .build();<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>  }<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span><a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>  ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>      throws IOException {<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>    // the wrapper to compute those numbers in one place.<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    // history.<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>    long usedMemory = -1L;<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>    long maxMemory = -1L;<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>    if (usage != null) {<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>      usedMemory = usage.getUsed();<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>      maxMemory = usage.getMax();<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>    }<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span><a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    serverLoad.setNumberOfRequests((int) region

<TRUNCATED>

[21/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html
index e50d3b7..9a5ac4f 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3829">HRegionServer.SystemExitWhenAbortTimeout</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3828">HRegionServer.SystemExitWhenAbortTimeout</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/TimerTask.html?is-external=true" title="class or interface in java.util">TimerTask</a></pre>
 <div class="block">Force to terminate region server when abort timeout.</div>
 </li>
@@ -199,7 +199,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/TimerTask.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SystemExitWhenAbortTimeout</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html#line.3831">SystemExitWhenAbortTimeout</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html#line.3830">SystemExitWhenAbortTimeout</a>()</pre>
 </li>
 </ul>
 </li>
@@ -216,7 +216,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/TimerTask.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html#line.3835">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html#line.3834">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>


[16/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/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 6591d6c..b31c78e 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
@@ -923,3042 +923,3045 @@
 <span class="sourceLineNo">915</span><a name="line.915"></a>
 <span class="sourceLineNo">916</span>    this.masterActiveTime = System.currentTimeMillis();<a name="line.916"></a>
 <span class="sourceLineNo">917</span>    // TODO: Do this using Dependency Injection, using PicoContainer, Guice or Spring.<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    // Initialize the chunkCreator<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    initializeMemStoreChunkCreator();<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.920"></a>
-<span class="sourceLineNo">921</span>    this.walManager = new MasterWalManager(this);<a name="line.921"></a>
-<span class="sourceLineNo">922</span><a name="line.922"></a>
-<span class="sourceLineNo">923</span>    // enable table descriptors cache<a name="line.923"></a>
-<span class="sourceLineNo">924</span>    this.tableDescriptors.setCacheOn();<a name="line.924"></a>
+<span class="sourceLineNo">918</span><a name="line.918"></a>
+<span class="sourceLineNo">919</span>    // Only initialize the MemStoreLAB when master carry table<a name="line.919"></a>
+<span class="sourceLineNo">920</span>    if (LoadBalancer.isTablesOnMaster(conf)) {<a name="line.920"></a>
+<span class="sourceLineNo">921</span>      initializeMemStoreChunkCreator();<a name="line.921"></a>
+<span class="sourceLineNo">922</span>    }<a name="line.922"></a>
+<span class="sourceLineNo">923</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.923"></a>
+<span class="sourceLineNo">924</span>    this.walManager = new MasterWalManager(this);<a name="line.924"></a>
 <span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>    // warm-up HTDs cache on master initialization<a name="line.926"></a>
-<span class="sourceLineNo">927</span>    if (preLoadTableDescriptors) {<a name="line.927"></a>
-<span class="sourceLineNo">928</span>      status.setStatus("Pre-loading table descriptors");<a name="line.928"></a>
-<span class="sourceLineNo">929</span>      this.tableDescriptors.getAll();<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>    // Publish cluster ID; set it in Master too. The superclass RegionServer does this later but<a name="line.932"></a>
-<span class="sourceLineNo">933</span>    // only after it has checked in with the Master. At least a few tests ask Master for clusterId<a name="line.933"></a>
-<span class="sourceLineNo">934</span>    // before it has called its run method and before RegionServer has done the reportForDuty.<a name="line.934"></a>
-<span class="sourceLineNo">935</span>    ClusterId clusterId = fileSystemManager.getClusterId();<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    status.setStatus("Publishing Cluster ID " + clusterId + " in ZooKeeper");<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.937"></a>
-<span class="sourceLineNo">938</span>    this.clusterId = clusterId.toString();<a name="line.938"></a>
-<span class="sourceLineNo">939</span><a name="line.939"></a>
-<span class="sourceLineNo">940</span>    // Precaution. Put in place the old hbck1 lock file to fence out old hbase1s running their<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    // hbck1s against an hbase2 cluster; it could do damage. To skip this behavior, set<a name="line.941"></a>
-<span class="sourceLineNo">942</span>    // hbase.write.hbck1.lock.file to false.<a name="line.942"></a>
-<span class="sourceLineNo">943</span>    if (this.conf.getBoolean("hbase.write.hbck1.lock.file", true)) {<a name="line.943"></a>
-<span class="sourceLineNo">944</span>      HBaseFsck.checkAndMarkRunningHbck(this.conf,<a name="line.944"></a>
-<span class="sourceLineNo">945</span>          HBaseFsck.createLockRetryCounterFactory(this.conf).create());<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    }<a name="line.946"></a>
-<span class="sourceLineNo">947</span><a name="line.947"></a>
-<span class="sourceLineNo">948</span>    status.setStatus("Initialize ServerManager and schedule SCP for crash servers");<a name="line.948"></a>
-<span class="sourceLineNo">949</span>    this.serverManager = createServerManager(this);<a name="line.949"></a>
-<span class="sourceLineNo">950</span>    createProcedureExecutor();<a name="line.950"></a>
-<span class="sourceLineNo">951</span>    @SuppressWarnings("rawtypes")<a name="line.951"></a>
-<span class="sourceLineNo">952</span>    Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType =<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      procedureExecutor.getActiveProceduresNoCopy().stream()<a name="line.953"></a>
-<span class="sourceLineNo">954</span>        .collect(Collectors.groupingBy(p -&gt; p.getClass()));<a name="line.954"></a>
-<span class="sourceLineNo">955</span><a name="line.955"></a>
-<span class="sourceLineNo">956</span>    checkUnsupportedProcedure(procsByType);<a name="line.956"></a>
-<span class="sourceLineNo">957</span><a name="line.957"></a>
-<span class="sourceLineNo">958</span>    // Create Assignment Manager<a name="line.958"></a>
-<span class="sourceLineNo">959</span>    this.assignmentManager = createAssignmentManager(this);<a name="line.959"></a>
-<span class="sourceLineNo">960</span>    this.assignmentManager.start();<a name="line.960"></a>
-<span class="sourceLineNo">961</span>    // TODO: TRSP can perform as the sub procedure for other procedures, so even if it is marked as<a name="line.961"></a>
-<span class="sourceLineNo">962</span>    // completed, it could still be in the procedure list. This is a bit strange but is another<a name="line.962"></a>
-<span class="sourceLineNo">963</span>    // story, need to verify the implementation for ProcedureExecutor and ProcedureStore.<a name="line.963"></a>
-<span class="sourceLineNo">964</span>    List&lt;TransitRegionStateProcedure&gt; ritList =<a name="line.964"></a>
-<span class="sourceLineNo">965</span>      procsByType.getOrDefault(TransitRegionStateProcedure.class, Collections.emptyList()).stream()<a name="line.965"></a>
-<span class="sourceLineNo">966</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p)<a name="line.966"></a>
-<span class="sourceLineNo">967</span>        .collect(Collectors.toList());<a name="line.967"></a>
-<span class="sourceLineNo">968</span>    this.assignmentManager.setupRIT(ritList);<a name="line.968"></a>
-<span class="sourceLineNo">969</span><a name="line.969"></a>
-<span class="sourceLineNo">970</span>    // Start RegionServerTracker with listing of servers found with exiting SCPs -- these should<a name="line.970"></a>
-<span class="sourceLineNo">971</span>    // be registered in the deadServers set -- and with the list of servernames out on the<a name="line.971"></a>
-<span class="sourceLineNo">972</span>    // filesystem that COULD BE 'alive' (we'll schedule SCPs for each and let SCP figure it out).<a name="line.972"></a>
-<span class="sourceLineNo">973</span>    // We also pass dirs that are already 'splitting'... so we can do some checks down in tracker.<a name="line.973"></a>
-<span class="sourceLineNo">974</span>    // TODO: Generate the splitting and live Set in one pass instead of two as we currently do.<a name="line.974"></a>
-<span class="sourceLineNo">975</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.975"></a>
-<span class="sourceLineNo">976</span>    this.regionServerTracker.start(<a name="line.976"></a>
-<span class="sourceLineNo">977</span>      procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.977"></a>
-<span class="sourceLineNo">978</span>        .map(p -&gt; (ServerCrashProcedure) p).map(p -&gt; p.getServerName()).collect(Collectors.toSet()),<a name="line.978"></a>
-<span class="sourceLineNo">979</span>      walManager.getLiveServersFromWALDir(), walManager.getSplittingServersFromWALDir());<a name="line.979"></a>
-<span class="sourceLineNo">980</span>    // This manager will be started AFTER hbase:meta is confirmed on line.<a name="line.980"></a>
-<span class="sourceLineNo">981</span>    // hbase.mirror.table.state.to.zookeeper is so hbase1 clients can connect. They read table<a name="line.981"></a>
-<span class="sourceLineNo">982</span>    // state from zookeeper while hbase2 reads it from hbase:meta. Disable if no hbase1 clients.<a name="line.982"></a>
-<span class="sourceLineNo">983</span>    this.tableStateManager =<a name="line.983"></a>
-<span class="sourceLineNo">984</span>      this.conf.getBoolean(MirroringTableStateManager.MIRROR_TABLE_STATE_TO_ZK_KEY, true)<a name="line.984"></a>
-<span class="sourceLineNo">985</span>        ?<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        new MirroringTableStateManager(this):<a name="line.986"></a>
-<span class="sourceLineNo">987</span>        new TableStateManager(this);<a name="line.987"></a>
-<span class="sourceLineNo">988</span><a name="line.988"></a>
-<span class="sourceLineNo">989</span>    status.setStatus("Initializing ZK system trackers");<a name="line.989"></a>
-<span class="sourceLineNo">990</span>    initializeZKBasedSystemTrackers();<a name="line.990"></a>
-<span class="sourceLineNo">991</span>    status.setStatus("Loading last flushed sequence id of regions");<a name="line.991"></a>
-<span class="sourceLineNo">992</span>    try {<a name="line.992"></a>
-<span class="sourceLineNo">993</span>      this.serverManager.loadLastFlushedSequenceIds();<a name="line.993"></a>
-<span class="sourceLineNo">994</span>    } catch (IOException e) {<a name="line.994"></a>
-<span class="sourceLineNo">995</span>      LOG.debug("Failed to load last flushed sequence id of regions"<a name="line.995"></a>
-<span class="sourceLineNo">996</span>          + " from file system", e);<a name="line.996"></a>
-<span class="sourceLineNo">997</span>    }<a name="line.997"></a>
-<span class="sourceLineNo">998</span>    // Set ourselves as active Master now our claim has succeeded up in zk.<a name="line.998"></a>
-<span class="sourceLineNo">999</span>    this.activeMaster = true;<a name="line.999"></a>
-<span class="sourceLineNo">1000</span><a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>    // This is for backwards compatibility<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>    // See HBASE-11393<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>    ReplicationPeerConfigUpgrader tableCFsUpdater =<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>        new ReplicationPeerConfigUpgrader(zooKeeper, conf);<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>    tableCFsUpdater.copyTableCFs();<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span><a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>    if (!maintenanceMode) {<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>      // Add the Observer to delete quotas on table deletion before starting all CPs by<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>      // default with quota support, avoiding if user specifically asks to not load this Observer.<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>      if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>        updateConfigurationForQuotasObserver(conf);<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>      }<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      // initialize master side coprocessors before we start handling requests<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>      status.setStatus("Initializing master coprocessors");<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>      this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>    }<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span><a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>    // Checking if meta needs initializing.<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    status.setStatus("Initializing meta table if this is a new deploy");<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>    InitMetaProcedure initMetaProc = null;<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>    // Print out state of hbase:meta on startup; helps debugging.<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>    RegionState rs = this.assignmentManager.getRegionStates().<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>        getRegionState(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>    LOG.info("hbase:meta {}", rs);<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>    if (rs.isOffline()) {<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>      Optional&lt;InitMetaProcedure&gt; optProc = procedureExecutor.getProcedures().stream()<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>        .filter(p -&gt; p instanceof InitMetaProcedure).map(o -&gt; (InitMetaProcedure) o).findAny();<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>      initMetaProc = optProc.orElseGet(() -&gt; {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>        // schedule an init meta procedure if meta has not been deployed yet<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>        InitMetaProcedure temp = new InitMetaProcedure();<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>        procedureExecutor.submitProcedure(temp);<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        return temp;<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      });<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>    }<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>    if (this.balancer instanceof FavoredNodesPromoter) {<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>      favoredNodesManager = new FavoredNodesManager(this);<a name="line.1037"></a>
+<span class="sourceLineNo">926</span>    // enable table descriptors cache<a name="line.926"></a>
+<span class="sourceLineNo">927</span>    this.tableDescriptors.setCacheOn();<a name="line.927"></a>
+<span class="sourceLineNo">928</span><a name="line.928"></a>
+<span class="sourceLineNo">929</span>    // warm-up HTDs cache on master initialization<a name="line.929"></a>
+<span class="sourceLineNo">930</span>    if (preLoadTableDescriptors) {<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      status.setStatus("Pre-loading table descriptors");<a name="line.931"></a>
+<span class="sourceLineNo">932</span>      this.tableDescriptors.getAll();<a name="line.932"></a>
+<span class="sourceLineNo">933</span>    }<a name="line.933"></a>
+<span class="sourceLineNo">934</span><a name="line.934"></a>
+<span class="sourceLineNo">935</span>    // Publish cluster ID; set it in Master too. The superclass RegionServer does this later but<a name="line.935"></a>
+<span class="sourceLineNo">936</span>    // only after it has checked in with the Master. At least a few tests ask Master for clusterId<a name="line.936"></a>
+<span class="sourceLineNo">937</span>    // before it has called its run method and before RegionServer has done the reportForDuty.<a name="line.937"></a>
+<span class="sourceLineNo">938</span>    ClusterId clusterId = fileSystemManager.getClusterId();<a name="line.938"></a>
+<span class="sourceLineNo">939</span>    status.setStatus("Publishing Cluster ID " + clusterId + " in ZooKeeper");<a name="line.939"></a>
+<span class="sourceLineNo">940</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.940"></a>
+<span class="sourceLineNo">941</span>    this.clusterId = clusterId.toString();<a name="line.941"></a>
+<span class="sourceLineNo">942</span><a name="line.942"></a>
+<span class="sourceLineNo">943</span>    // Precaution. Put in place the old hbck1 lock file to fence out old hbase1s running their<a name="line.943"></a>
+<span class="sourceLineNo">944</span>    // hbck1s against an hbase2 cluster; it could do damage. To skip this behavior, set<a name="line.944"></a>
+<span class="sourceLineNo">945</span>    // hbase.write.hbck1.lock.file to false.<a name="line.945"></a>
+<span class="sourceLineNo">946</span>    if (this.conf.getBoolean("hbase.write.hbck1.lock.file", true)) {<a name="line.946"></a>
+<span class="sourceLineNo">947</span>      HBaseFsck.checkAndMarkRunningHbck(this.conf,<a name="line.947"></a>
+<span class="sourceLineNo">948</span>          HBaseFsck.createLockRetryCounterFactory(this.conf).create());<a name="line.948"></a>
+<span class="sourceLineNo">949</span>    }<a name="line.949"></a>
+<span class="sourceLineNo">950</span><a name="line.950"></a>
+<span class="sourceLineNo">951</span>    status.setStatus("Initialize ServerManager and schedule SCP for crash servers");<a name="line.951"></a>
+<span class="sourceLineNo">952</span>    this.serverManager = createServerManager(this);<a name="line.952"></a>
+<span class="sourceLineNo">953</span>    createProcedureExecutor();<a name="line.953"></a>
+<span class="sourceLineNo">954</span>    @SuppressWarnings("rawtypes")<a name="line.954"></a>
+<span class="sourceLineNo">955</span>    Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType =<a name="line.955"></a>
+<span class="sourceLineNo">956</span>      procedureExecutor.getActiveProceduresNoCopy().stream()<a name="line.956"></a>
+<span class="sourceLineNo">957</span>        .collect(Collectors.groupingBy(p -&gt; p.getClass()));<a name="line.957"></a>
+<span class="sourceLineNo">958</span><a name="line.958"></a>
+<span class="sourceLineNo">959</span>    checkUnsupportedProcedure(procsByType);<a name="line.959"></a>
+<span class="sourceLineNo">960</span><a name="line.960"></a>
+<span class="sourceLineNo">961</span>    // Create Assignment Manager<a name="line.961"></a>
+<span class="sourceLineNo">962</span>    this.assignmentManager = createAssignmentManager(this);<a name="line.962"></a>
+<span class="sourceLineNo">963</span>    this.assignmentManager.start();<a name="line.963"></a>
+<span class="sourceLineNo">964</span>    // TODO: TRSP can perform as the sub procedure for other procedures, so even if it is marked as<a name="line.964"></a>
+<span class="sourceLineNo">965</span>    // completed, it could still be in the procedure list. This is a bit strange but is another<a name="line.965"></a>
+<span class="sourceLineNo">966</span>    // story, need to verify the implementation for ProcedureExecutor and ProcedureStore.<a name="line.966"></a>
+<span class="sourceLineNo">967</span>    List&lt;TransitRegionStateProcedure&gt; ritList =<a name="line.967"></a>
+<span class="sourceLineNo">968</span>      procsByType.getOrDefault(TransitRegionStateProcedure.class, Collections.emptyList()).stream()<a name="line.968"></a>
+<span class="sourceLineNo">969</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p)<a name="line.969"></a>
+<span class="sourceLineNo">970</span>        .collect(Collectors.toList());<a name="line.970"></a>
+<span class="sourceLineNo">971</span>    this.assignmentManager.setupRIT(ritList);<a name="line.971"></a>
+<span class="sourceLineNo">972</span><a name="line.972"></a>
+<span class="sourceLineNo">973</span>    // Start RegionServerTracker with listing of servers found with exiting SCPs -- these should<a name="line.973"></a>
+<span class="sourceLineNo">974</span>    // be registered in the deadServers set -- and with the list of servernames out on the<a name="line.974"></a>
+<span class="sourceLineNo">975</span>    // filesystem that COULD BE 'alive' (we'll schedule SCPs for each and let SCP figure it out).<a name="line.975"></a>
+<span class="sourceLineNo">976</span>    // We also pass dirs that are already 'splitting'... so we can do some checks down in tracker.<a name="line.976"></a>
+<span class="sourceLineNo">977</span>    // TODO: Generate the splitting and live Set in one pass instead of two as we currently do.<a name="line.977"></a>
+<span class="sourceLineNo">978</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.978"></a>
+<span class="sourceLineNo">979</span>    this.regionServerTracker.start(<a name="line.979"></a>
+<span class="sourceLineNo">980</span>      procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.980"></a>
+<span class="sourceLineNo">981</span>        .map(p -&gt; (ServerCrashProcedure) p).map(p -&gt; p.getServerName()).collect(Collectors.toSet()),<a name="line.981"></a>
+<span class="sourceLineNo">982</span>      walManager.getLiveServersFromWALDir(), walManager.getSplittingServersFromWALDir());<a name="line.982"></a>
+<span class="sourceLineNo">983</span>    // This manager will be started AFTER hbase:meta is confirmed on line.<a name="line.983"></a>
+<span class="sourceLineNo">984</span>    // hbase.mirror.table.state.to.zookeeper is so hbase1 clients can connect. They read table<a name="line.984"></a>
+<span class="sourceLineNo">985</span>    // state from zookeeper while hbase2 reads it from hbase:meta. Disable if no hbase1 clients.<a name="line.985"></a>
+<span class="sourceLineNo">986</span>    this.tableStateManager =<a name="line.986"></a>
+<span class="sourceLineNo">987</span>      this.conf.getBoolean(MirroringTableStateManager.MIRROR_TABLE_STATE_TO_ZK_KEY, true)<a name="line.987"></a>
+<span class="sourceLineNo">988</span>        ?<a name="line.988"></a>
+<span class="sourceLineNo">989</span>        new MirroringTableStateManager(this):<a name="line.989"></a>
+<span class="sourceLineNo">990</span>        new TableStateManager(this);<a name="line.990"></a>
+<span class="sourceLineNo">991</span><a name="line.991"></a>
+<span class="sourceLineNo">992</span>    status.setStatus("Initializing ZK system trackers");<a name="line.992"></a>
+<span class="sourceLineNo">993</span>    initializeZKBasedSystemTrackers();<a name="line.993"></a>
+<span class="sourceLineNo">994</span>    status.setStatus("Loading last flushed sequence id of regions");<a name="line.994"></a>
+<span class="sourceLineNo">995</span>    try {<a name="line.995"></a>
+<span class="sourceLineNo">996</span>      this.serverManager.loadLastFlushedSequenceIds();<a name="line.996"></a>
+<span class="sourceLineNo">997</span>    } catch (IOException e) {<a name="line.997"></a>
+<span class="sourceLineNo">998</span>      LOG.debug("Failed to load last flushed sequence id of regions"<a name="line.998"></a>
+<span class="sourceLineNo">999</span>          + " from file system", e);<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>    }<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>    // Set ourselves as active Master now our claim has succeeded up in zk.<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>    this.activeMaster = true;<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span><a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>    // This is for backwards compatibility<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>    // See HBASE-11393<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>    ReplicationPeerConfigUpgrader tableCFsUpdater =<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>        new ReplicationPeerConfigUpgrader(zooKeeper, conf);<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>    tableCFsUpdater.copyTableCFs();<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span><a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>    if (!maintenanceMode) {<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>      // Add the Observer to delete quotas on table deletion before starting all CPs by<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>      // default with quota support, avoiding if user specifically asks to not load this Observer.<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>      if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>        updateConfigurationForQuotasObserver(conf);<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>      }<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>      // initialize master side coprocessors before we start handling requests<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>      status.setStatus("Initializing master coprocessors");<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>      this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>    }<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span><a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>    // Checking if meta needs initializing.<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>    status.setStatus("Initializing meta table if this is a new deploy");<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>    InitMetaProcedure initMetaProc = null;<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>    // Print out state of hbase:meta on startup; helps debugging.<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>    RegionState rs = this.assignmentManager.getRegionStates().<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>        getRegionState(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>    LOG.info("hbase:meta {}", rs);<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>    if (rs.isOffline()) {<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>      Optional&lt;InitMetaProcedure&gt; optProc = procedureExecutor.getProcedures().stream()<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>        .filter(p -&gt; p instanceof InitMetaProcedure).map(o -&gt; (InitMetaProcedure) o).findAny();<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      initMetaProc = optProc.orElseGet(() -&gt; {<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>        // schedule an init meta procedure if meta has not been deployed yet<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>        InitMetaProcedure temp = new InitMetaProcedure();<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>        procedureExecutor.submitProcedure(temp);<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>        return temp;<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>      });<a name="line.1037"></a>
 <span class="sourceLineNo">1038</span>    }<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span><a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>    // initialize load balancer<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>    this.balancer.setMasterServices(this);<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>    this.balancer.initialize();<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span><a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    // start up all service threads.<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    status.setStatus("Initializing master service threads");<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>    startServiceThreads();<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>    // wait meta to be initialized after we start procedure executor<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    if (initMetaProc != null) {<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>      initMetaProc.await();<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>    }<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    // Wake up this server to check in<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    sleeper.skipSleepCycle();<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span><a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    // Wait for region servers to report in.<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>    // With this as part of master initialization, it precludes our being able to start a single<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    // server that is both Master and RegionServer. Needs more thought. TODO.<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    String statusStr = "Wait for region servers to report in";<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    status.setStatus(statusStr);<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>    LOG.info(Objects.toString(status));<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>    waitForRegionServers(status);<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span><a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>    // Check if master is shutting down because issue initializing regionservers or balancer.<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    if (isStopped()) {<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>      return;<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    }<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span><a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    status.setStatus("Starting assignment manager");<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>    // FIRST HBASE:META READ!!!!<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    // The below cannot make progress w/o hbase:meta being online.<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    // This is the FIRST attempt at going to hbase:meta. Meta on-lining is going on in background<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    // as procedures run -- in particular SCPs for crashed servers... One should put up hbase:meta<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    // if it is down. It may take a while to come online. So, wait here until meta if for sure<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    // available. That's what waitForMetaOnline does.<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    if (!waitForMetaOnline()) {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>      return;<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    }<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>    this.assignmentManager.joinCluster();<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    // The below depends on hbase:meta being online.<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    this.tableStateManager.start();<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>    // Initialize after meta is up as below scans meta<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    if (favoredNodesManager != null &amp;&amp; !maintenanceMode) {<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>      SnapshotOfRegionAssignmentFromMeta snapshotOfRegionAssignment =<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>          new SnapshotOfRegionAssignmentFromMeta(getConnection());<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>      snapshotOfRegionAssignment.initialize();<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>      favoredNodesManager.initialize(snapshotOfRegionAssignment);<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>    }<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span><a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    // set cluster status again after user regions are assigned<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1090"></a>
+<span class="sourceLineNo">1039</span>    if (this.balancer instanceof FavoredNodesPromoter) {<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>      favoredNodesManager = new FavoredNodesManager(this);<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>    }<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span><a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>    // initialize load balancer<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>    this.balancer.setMasterServices(this);<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>    this.balancer.initialize();<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span><a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>    // start up all service threads.<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>    status.setStatus("Initializing master service threads");<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>    startServiceThreads();<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>    // wait meta to be initialized after we start procedure executor<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>    if (initMetaProc != null) {<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>      initMetaProc.await();<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>    }<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>    // Wake up this server to check in<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>    sleeper.skipSleepCycle();<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span><a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>    // Wait for region servers to report in.<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>    // With this as part of master initialization, it precludes our being able to start a single<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>    // server that is both Master and RegionServer. Needs more thought. TODO.<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    String statusStr = "Wait for region servers to report in";<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>    status.setStatus(statusStr);<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>    LOG.info(Objects.toString(status));<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>    waitForRegionServers(status);<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span><a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    // Check if master is shutting down because issue initializing regionservers or balancer.<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>    if (isStopped()) {<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>      return;<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>    }<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span><a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>    status.setStatus("Starting assignment manager");<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>    // FIRST HBASE:META READ!!!!<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>    // The below cannot make progress w/o hbase:meta being online.<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    // This is the FIRST attempt at going to hbase:meta. Meta on-lining is going on in background<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    // as procedures run -- in particular SCPs for crashed servers... One should put up hbase:meta<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    // if it is down. It may take a while to come online. So, wait here until meta if for sure<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    // available. That's what waitForMetaOnline does.<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>    if (!waitForMetaOnline()) {<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      return;<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>    }<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>    this.assignmentManager.joinCluster();<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>    // The below depends on hbase:meta being online.<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>    this.tableStateManager.start();<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>    // Initialize after meta is up as below scans meta<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    if (favoredNodesManager != null &amp;&amp; !maintenanceMode) {<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>      SnapshotOfRegionAssignmentFromMeta snapshotOfRegionAssignment =<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>          new SnapshotOfRegionAssignmentFromMeta(getConnection());<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      snapshotOfRegionAssignment.initialize();<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>      favoredNodesManager.initialize(snapshotOfRegionAssignment);<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>    }<a name="line.1090"></a>
 <span class="sourceLineNo">1091</span><a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>    this.balancerChore = new BalancerChore(this);<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>    getChoreService().scheduleChore(balancerChore);<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>    this.catalogJanitorChore = new CatalogJanitor(this);<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    this.serverManager.startChore();<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span><a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>    // NAMESPACE READ!!!!<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    // Here we expect hbase:namespace to be online. See inside initClusterSchemaService.<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    // TODO: Fix this. Namespace is a pain being a sort-of system table. Fold it in to hbase:meta.<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    // isNamespace does like isMeta and waits until namespace is onlined before allowing progress.<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    if (!waitForNamespaceOnline()) {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      return;<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    }<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>    status.setStatus("Starting cluster schema service");<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>    initClusterSchemaService();<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span><a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>    if (this.cpHost != null) {<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>      try {<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>        this.cpHost.preMasterInitialization();<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>      } catch (IOException e) {<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<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><a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>    status.markComplete("Initialization successful");<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    LOG.info(String.format("Master has completed initialization %.3fsec",<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>       (System.currentTimeMillis() - masterActiveTime) / 1000.0f));<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    this.masterFinishedInitializationTime = System.currentTimeMillis();<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>    configurationManager.registerObserver(this.balancer);<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    configurationManager.registerObserver(this.hfileCleaner);<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>    configurationManager.registerObserver(this.logCleaner);<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    // Set master as 'initialized'.<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>    setInitialized(true);<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span><a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    if (maintenanceMode) {<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>      LOG.info("Detected repair mode, skipping final initialization steps.");<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>      return;<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>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>    status.setStatus("Assign meta replicas");<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap();<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>    metaBootstrap.assignMetaReplicas();<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>    status.setStatus("Starting quota manager");<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>    initQuotaManager();<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>      // Create the quota snapshot notifier<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>      spaceQuotaSnapshotNotifier = createQuotaSnapshotNotifier();<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>      spaceQuotaSnapshotNotifier.initialize(getClusterConnection());<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>      this.quotaObserverChore = new QuotaObserverChore(this, getMasterMetrics());<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>      // Start the chore to read the region FS space reports and act on them<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>      getChoreService().scheduleChore(quotaObserverChore);<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span><a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>      this.snapshotQuotaChore = new SnapshotQuotaObserverChore(this, getMasterMetrics());<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>      // Start the chore to read snapshots and add their usage to table/NS quotas<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>      getChoreService().scheduleChore(snapshotQuotaChore);<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>    // clear the dead servers with same host name and port of online server because we are not<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    // removing dead server with same hostname and port of rs which is trying to check in before<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>    // master initialization. See HBASE-5916.<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    this.serverManager.clearDeadServersWithSameHostNameAndPortOfOnlineServer();<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span><a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    // Check and set the znode ACLs if needed in case we are overtaking a non-secure configuration<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>    status.setStatus("Checking ZNode ACLs");<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>    zooKeeper.checkAndSetZNodeAcls();<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span><a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    status.setStatus("Initializing MOB Cleaner");<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>    initMobCleaner();<a name="line.1166"></a>
+<span class="sourceLineNo">1092</span>    // set cluster status again after user regions are assigned<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span><a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>    this.balancerChore = new BalancerChore(this);<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>    getChoreService().scheduleChore(balancerChore);<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>    this.catalogJanitorChore = new CatalogJanitor(this);<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>    this.serverManager.startChore();<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span><a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>    // NAMESPACE READ!!!!<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    // Here we expect hbase:namespace to be online. See inside initClusterSchemaService.<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>    // TODO: Fix this. Namespace is a pain being a sort-of system table. Fold it in to hbase:meta.<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>    // isNamespace does like isMeta and waits until namespace is onlined before allowing progress.<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>    if (!waitForNamespaceOnline()) {<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>      return;<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>    }<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>    status.setStatus("Starting cluster schema service");<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>    initClusterSchemaService();<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span><a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>    if (this.cpHost != null) {<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>      try {<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>        this.cpHost.preMasterInitialization();<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>      } catch (IOException e) {<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<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><a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>    status.markComplete("Initialization successful");<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>    LOG.info(String.format("Master has completed initialization %.3fsec",<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>       (System.currentTimeMillis() - masterActiveTime) / 1000.0f));<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    this.masterFinishedInitializationTime = System.currentTimeMillis();<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>    configurationManager.registerObserver(this.balancer);<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>    configurationManager.registerObserver(this.hfileCleaner);<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    configurationManager.registerObserver(this.logCleaner);<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>    // Set master as 'initialized'.<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    setInitialized(true);<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span><a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>    if (maintenanceMode) {<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>      LOG.info("Detected repair mode, skipping final initialization steps.");<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>      return;<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>    }<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span><a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>    status.setStatus("Assign meta replicas");<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap();<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>    metaBootstrap.assignMetaReplicas();<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>    status.setStatus("Starting quota manager");<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>    initQuotaManager();<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>      // Create the quota snapshot notifier<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>      spaceQuotaSnapshotNotifier = createQuotaSnapshotNotifier();<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>      spaceQuotaSnapshotNotifier.initialize(getClusterConnection());<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>      this.quotaObserverChore = new QuotaObserverChore(this, getMasterMetrics());<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>      // Start the chore to read the region FS space reports and act on them<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>      getChoreService().scheduleChore(quotaObserverChore);<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span><a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>      this.snapshotQuotaChore = new SnapshotQuotaObserverChore(this, getMasterMetrics());<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>      // Start the chore to read snapshots and add their usage to table/NS quotas<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>      getChoreService().scheduleChore(snapshotQuotaChore);<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>    }<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span><a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>    // clear the dead servers with same host name and port of online server because we are not<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>    // removing dead server with same hostname and port of rs which is trying to check in before<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>    // master initialization. See HBASE-5916.<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>    this.serverManager.clearDeadServersWithSameHostNameAndPortOfOnlineServer();<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span><a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>    // Check and set the znode ACLs if needed in case we are overtaking a non-secure configuration<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>    status.setStatus("Checking ZNode ACLs");<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>    zooKeeper.checkAndSetZNodeAcls();<a name="line.1166"></a>
 <span class="sourceLineNo">1167</span><a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>    status.setStatus("Calling postStartMaster coprocessors");<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    if (this.cpHost != null) {<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>      // don't let cp initialization errors kill the master<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>      try {<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>        this.cpHost.postStartMaster();<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>      } catch (IOException ioe) {<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>        LOG.error("Coprocessor postStartMaster() hook failed", ioe);<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>      }<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>    }<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span><a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>    zombieDetector.interrupt();<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span><a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>    /*<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>     * After master has started up, lets do balancer post startup initialization. Since this runs<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>     * in activeMasterManager thread, it should be fine.<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>     */<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>    long start = System.currentTimeMillis();<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    this.balancer.postMasterStartupInitialize();<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    if (LOG.isDebugEnabled()) {<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>      LOG.debug("Balancer post startup initialization complete, took " + (<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>          (System.currentTimeMillis() - start) / 1000) + " seconds");<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>   * Check hbase:meta is up and ready for reading. For use during Master startup only.<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>   * @return True if meta is UP and online and startup can progress. Otherwise, meta is not online<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>   *   and we will hold here until operator intervention.<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>   */<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>  @VisibleForTesting<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>  public boolean waitForMetaOnline() throws InterruptedException {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>    return isRegionOnline(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>  }<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>   * @return True if region is online and scannable else false if an error or shutdown (Otherwise<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>   *   we just block in here holding up all forward-progess).<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>   */<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>  private boolean isRegionOnline(RegionInfo ri) throws InterruptedException {<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>    RetryCounter rc = null;<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>    while (!isStopped()) {<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>      RegionState rs = this.assignmentManager.getRegionStates().getRegionState(ri);<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>      if (rs.isOpened()) {<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>        if (this.getServerManager().isServerOnline(rs.getServerName())) {<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>          return true;<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>        }<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>      }<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>      // Region is not OPEN.<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>      Optional&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; optProc = this.procedureExecutor.getProcedures().<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>          stream().filter(p -&gt; p instanceof ServerCrashProcedure).findAny();<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      // TODO: Add a page to refguide on how to do repair. Have this log message point to it.<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>      // Page will talk about loss of edits, how to schedule at least the meta WAL recovery, and<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>      // then how to assign including how to break region lock if one held.<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>      LOG.warn("{} is NOT online; state={}; ServerCrashProcedures={}. Master startup cannot " +<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>          "progress, in holding-pattern until region onlined.",<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>          ri.getRegionNameAsString(), rs, optProc.isPresent());<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>      // Check once-a-minute.<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>      if (rc == null) {<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>        rc = new RetryCounterFactory(1000).create();<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>      }<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>      Threads.sleep(rc.getBackoffTimeAndIncrementAttempts());<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>    }<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>    return false;<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>   * Check hbase:namespace table is assigned. If not, startup will hang looking for the ns table<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>   * (TODO: Fix this! NS should not hold-up startup).<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>   * @return True if namespace table is up/online.<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>   */<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>  @VisibleForTesting<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>  public boolean waitForNamespaceOnline() throws InterruptedException {<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>    List&lt;RegionInfo&gt; ris = this.assignmentManager.getRegionStates().<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>        getRegionsOfTable(TableName.NAMESPACE_TABLE_NAME);<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>    if (ris.isEmpty()) {<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>      // If empty, means we've not assigned the namespace table yet... Just return true so startup<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>      // continues and the namespace table gets created.<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>      return true;<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>    }<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>    // Else there are namespace regions up in meta. Ensure they are assigned before we go on.<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>    for (RegionInfo ri: ris) {<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>      isRegionOnline(ri);<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>    }<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>    return true;<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>  }<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span><a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>  /**<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>   * Adds the {@code MasterQuotasObserver} to the list of configured Master observers to<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>   * automatically remove quotas for a table when that table is deleted.<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>   */<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>  @VisibleForTesting<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>  public void updateConfigurationForQuotasObserver(Configuration conf) {<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>    // We're configured to not delete quotas on table deletion, so we don't need to add the obs.<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>    if (!conf.getBoolean(<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>          MasterQuotasObserver.REMOVE_QUOTA_ON_TABLE_DELETE,<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>          MasterQuotasObserver.REMOVE_QUOTA_ON_TABLE_DELETE_DEFAULT)) {<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>      return;<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>    }<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>    String[] masterCoprocs = conf.getStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY);<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>    final int length = null == masterCoprocs ? 0 : masterCoprocs.length;<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>    String[] updatedCoprocs = new String[length + 1];<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>    if (length &gt; 0) {<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>      System.arraycopy(masterCoprocs, 0, updatedCoprocs, 0, masterCoprocs.length);<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>    }<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>    updatedCoprocs[length] = MasterQuotasObserver.class.getName();<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>    conf.setStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, updatedCoprocs);<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>  }<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span><a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>  private void initMobCleaner() {<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>    this.expiredMobFileCleanerChore = new ExpiredMobFileCleanerChore(this);<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>    getChoreService().scheduleChore(expiredMobFileCleanerChore);<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span><a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>    int mobCompactionPeriod = conf.getInt(MobConstants.MOB_COMPACTION_CHORE_PERIOD,<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>        MobConstants.DEFAULT_MOB_COMPACTION_CHORE_PERIOD);<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>    if (mobCompactionPeriod &gt; 0) {<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>      this.mobCompactChore = new MobCompactionChore(this, mobCompactionPeriod);<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>      getChoreService().scheduleChore(mobCompactChore);<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>    } else {<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>      LOG<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>        .info("The period is " + mobCompactionPeriod + " seconds, MobCompactionChore is disabled");<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>    }<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>    this.mobCompactThread = new MasterMobCompactionThread(this);<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>  }<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span><a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>  /**<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>   * &lt;p&gt;<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>   * Create a {@link MasterMetaBootstrap} instance.<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>   * &lt;/p&gt;<a name="line.1295"></a>
+<span class="sourceLineNo">1168</span>    status.setStatus("Initializing MOB Cleaner");<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>    initMobCleaner();<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span><a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>    status.setStatus("Calling postStartMaster coprocessors");<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>    if (this.cpHost != null) {<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>      // don't let cp initialization errors kill the master<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>      try {<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>        this.cpHost.postStartMaster();<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>      } catch (IOException ioe) {<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>        LOG.error("Coprocessor postStartMaster() hook failed", ioe);<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>      }<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>    }<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span><a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>    zombieDetector.interrupt();<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>     * After master has started up, lets do balancer post startup initialization. Since this runs<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>     * in activeMasterManager thread, it should be fine.<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>     */<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>    long start = System.currentTimeMillis();<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>    this.balancer.postMasterStartupInitialize();<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>    if (LOG.isDebugEnabled()) {<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>      LOG.debug("Balancer post startup initialization complete, took " + (<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>          (System.currentTimeMillis() - start) / 1000) + " seconds");<a name="line.1191"></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><a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>  /**<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>   * Check hbase:meta is up and ready for reading. For use during Master startup only.<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>   * @return True if meta is UP and online and startup can progress. Otherwise, meta is not online<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>   *   and we will hold here until operator intervention.<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>   */<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>  @VisibleForTesting<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>  public boolean waitForMetaOnline() throws InterruptedException {<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    return isRegionOnline(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>  }<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>   * @return True if region is online and scannable else false if an error or shutdown (Otherwise<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>   *   we just block in here holding up all forward-progess).<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>   */<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>  private boolean isRegionOnline(RegionInfo ri) throws InterruptedException {<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>    RetryCounter rc = null;<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>    while (!isStopped()) {<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>      RegionState rs = this.assignmentManager.getRegionStates().getRegionState(ri);<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>      if (rs.isOpened()) {<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>        if (this.getServerManager().isServerOnline(rs.getServerName())) {<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>          return true;<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>        }<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>      }<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>      // Region is not OPEN.<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      Optional&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; optProc = this.procedureExecutor.getProcedures().<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>          stream().filter(p -&gt; p instanceof ServerCrashProcedure).findAny();<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>      // TODO: Add a page to refguide on how to do repair. Have this log message point to it.<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>      // Page will talk about loss of edits, how to schedule at least the meta WAL recovery, and<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>      // then how to assign including how to break region lock if one held.<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>      LOG.warn("{} is NOT online; state={}; ServerCrashProcedures={}. Master startup cannot " +<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>          "progress, in holding-pattern until region onlined.",<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>          ri.getRegionNameAsString(), rs, optProc.isPresent());<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>      // Check once-a-minute.<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      if (rc == null) {<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>        rc = new RetryCounterFactory(1000).create();<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>      }<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>      Threads.sleep(rc.getBackoffTimeAndIncrementAttempts());<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>    }<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>    return false;<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>  /**<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>   * Check hbase:namespace table is assigned. If not, startup will hang looking for the ns table<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>   * (TODO: Fix this! NS should not hold-up startup).<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>   * @return True if namespace table is up/online.<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>   */<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>  @VisibleForTesting<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>  public boolean waitForNamespaceOnline() throws InterruptedException {<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>    List&lt;RegionInfo&gt; ris = this.assignmentManager.getRegionStates().<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>        getRegionsOfTable(TableName.NAMESPACE_TABLE_NAME);<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>    if (ris.isEmpty()) {<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>      // If empty, means we've not assigned the namespace table yet... Just return true so startup<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>      // continues and the namespace table gets created.<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>      return true;<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>    }<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>    // Else there are namespace regions up in meta. Ensure they are assigned before we go on.<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>    for (RegionInfo ri: ris) {<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>      isRegionOnline(ri);<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>    }<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>    return true;<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>  }<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span><a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>  /**<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>   * Adds the {@code MasterQuotasObserver} to the list of configured Master observers to<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>   * automatically remove quotas for a table when that table is deleted.<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>   */<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>  @VisibleForTesting<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>  public void updateConfigurationForQuotasObserver(Configuration conf) {<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>    // We're configured to not delete quotas on table deletion, so we don't need to add the obs.<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>    if (!conf.getBoolean(<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>          MasterQuotasObserver.REMOVE_QUOTA_ON_TABLE_DELETE,<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>          MasterQuotasObserver.REMOVE_QUOTA_ON_TABLE_DELETE_DEFAULT)) {<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>      return;<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>    }<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>    String[] masterCoprocs = conf.getStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY);<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>    final int length = null == masterCoprocs ? 0 : masterCoprocs.length;<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>    String[] updatedCoprocs = new String[length + 1];<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>    if (length &gt; 0) {<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>      System.arraycopy(masterCoprocs, 0, updatedCoprocs, 0, masterCoprocs.length);<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>    }<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>    updatedCoprocs[length] = MasterQuotasObserver.class.getName();<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>    conf.setStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, updatedCoprocs);<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>  }<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span><a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>  private void initMobCleaner() {<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>    this.expiredMobFileCleanerChore = new ExpiredMobFileCleanerChore(this);<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>    getChoreService().scheduleChore(expiredMobFileCleanerChore);<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span><a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>    int mobCompactionPeriod = conf.getInt(MobConstants.MOB_COMPACTION_CHORE_PERIOD,<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>        MobConstants.DEFAULT_MOB_COMPACTION_CHORE_PERIOD);<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>    if (mobCompactionPeriod &gt; 0) {<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>      this.mobCompactChore = new MobCompactionChore(this, mobCompactionPeriod);<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>      getChoreService().scheduleChore(mobCompactChore);<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>    } else {<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>      LOG<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>        .info("The period is " + mobCompactionPeriod + " seconds, MobCompactionChore is disabled");<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>    }<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>    this.mobCompactThread = new MasterMobCompactionThread(this);<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>  /**<a name="line.1295"></a>
 <span class="sourceLineNo">1296</span>   * &lt;p&gt;<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>   * Will be overridden in tests.<a name="line.1297"></a>
+<span class="sourceLineNo">1297</span>   * Create a {@link MasterMetaBootstrap} instance.<a name="line.1297"></a>
 <span class="sourceLineNo">1298</span>   * &lt;/p&gt;<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>   */<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>  @VisibleForTesting<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>  protected MasterMetaBootstrap createMetaBootstrap() {<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>    // w/ a mocked up MasterMetaBootstrap.<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>    return new MasterMetaBootstrap(this);<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>  }<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span><a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>  /**<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>   * &lt;p&gt;<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>   * Create a {@link ServerManager} instance.<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>   * &lt;/p&gt;<a name="line.1310"></a>
+<span class="sourceLineNo">1299</span>   * &lt;p&gt;<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>   * Will be overridden in tests.<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>   * &lt;/p&gt;<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>   */<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>  @VisibleForTesting<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>  protected MasterMetaBootstrap createMetaBootstrap() {<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>    // w/ a mocked up MasterMetaBootstrap.<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>    return new MasterMetaBootstrap(this);<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>  }<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span><a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>  /**<a name="line.1310"></a>
 <span class="sourceLineNo">1311</span>   * &lt;p&gt;<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>   * Will be overridden in tests.<a name="line.1312"></a>
+<span class="sourceLineNo">1312</span>   * Create a {@link ServerManager} instance.<a name="line.1312"></a>
 <span class="sourceLineNo">1313</span>   * &lt;/p&gt;<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>   */<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>  @VisibleForTesting<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>  protected ServerManager createServerManager(final MasterServices master) throws IOException {<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>    // w/ a mocked up ServerManager.<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>    setupClusterConnection();<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>    return new ServerManager(master);<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>  }<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span><a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>  private void waitForRegionServers(final MonitoredTask status)<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>      throws IOException, InterruptedException {<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>    this.serverManager.waitForRegionServers(status);<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>  }<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span><a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>  // Will be overridden in tests<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>  @VisibleForTesting<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>  protected void initClusterSchemaService() throws IOException, InterruptedException {<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>    this.clusterSchemaService = new ClusterSchemaServiceImpl(this);<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>    this.clusterSchemaService.startAsync();<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>    try {<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>      this.clusterSchemaService.awaitRunning(getConfiguration().getInt(<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>        HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS,<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>        DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS), TimeUnit.SECONDS);<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    } catch (TimeoutException toe) {<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>      throw new IOException("Timedout starting ClusterSchemaService", toe);<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    }<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>  }<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span><a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>  private void initQuotaManager() throws IOException {<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>    MasterQuotaManager quotaManager = new MasterQuotaManager(this);<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>    quotaManager.start();<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>    this.quotaManager = quotaManager;<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>  }<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span><a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>  private SpaceQuotaSnapshotNotifier createQuotaSnapshotNotifier() {<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    SpaceQuotaSnapshotNotifier notifier =<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>        SpaceQuotaSnapshotNotifierFactory.getInstance().create(getConfiguration());<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    return notifier;<a name="line.1351"></a>
-<span class

<TRUNCATED>

[17/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/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 6591d6c..b31c78e 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
@@ -923,3042 +923,3045 @@
 <span class="sourceLineNo">915</span><a name="line.915"></a>
 <span class="sourceLineNo">916</span>    this.masterActiveTime = System.currentTimeMillis();<a name="line.916"></a>
 <span class="sourceLineNo">917</span>    // TODO: Do this using Dependency Injection, using PicoContainer, Guice or Spring.<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    // Initialize the chunkCreator<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    initializeMemStoreChunkCreator();<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.920"></a>
-<span class="sourceLineNo">921</span>    this.walManager = new MasterWalManager(this);<a name="line.921"></a>
-<span class="sourceLineNo">922</span><a name="line.922"></a>
-<span class="sourceLineNo">923</span>    // enable table descriptors cache<a name="line.923"></a>
-<span class="sourceLineNo">924</span>    this.tableDescriptors.setCacheOn();<a name="line.924"></a>
+<span class="sourceLineNo">918</span><a name="line.918"></a>
+<span class="sourceLineNo">919</span>    // Only initialize the MemStoreLAB when master carry table<a name="line.919"></a>
+<span class="sourceLineNo">920</span>    if (LoadBalancer.isTablesOnMaster(conf)) {<a name="line.920"></a>
+<span class="sourceLineNo">921</span>      initializeMemStoreChunkCreator();<a name="line.921"></a>
+<span class="sourceLineNo">922</span>    }<a name="line.922"></a>
+<span class="sourceLineNo">923</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.923"></a>
+<span class="sourceLineNo">924</span>    this.walManager = new MasterWalManager(this);<a name="line.924"></a>
 <span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>    // warm-up HTDs cache on master initialization<a name="line.926"></a>
-<span class="sourceLineNo">927</span>    if (preLoadTableDescriptors) {<a name="line.927"></a>
-<span class="sourceLineNo">928</span>      status.setStatus("Pre-loading table descriptors");<a name="line.928"></a>
-<span class="sourceLineNo">929</span>      this.tableDescriptors.getAll();<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>    // Publish cluster ID; set it in Master too. The superclass RegionServer does this later but<a name="line.932"></a>
-<span class="sourceLineNo">933</span>    // only after it has checked in with the Master. At least a few tests ask Master for clusterId<a name="line.933"></a>
-<span class="sourceLineNo">934</span>    // before it has called its run method and before RegionServer has done the reportForDuty.<a name="line.934"></a>
-<span class="sourceLineNo">935</span>    ClusterId clusterId = fileSystemManager.getClusterId();<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    status.setStatus("Publishing Cluster ID " + clusterId + " in ZooKeeper");<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.937"></a>
-<span class="sourceLineNo">938</span>    this.clusterId = clusterId.toString();<a name="line.938"></a>
-<span class="sourceLineNo">939</span><a name="line.939"></a>
-<span class="sourceLineNo">940</span>    // Precaution. Put in place the old hbck1 lock file to fence out old hbase1s running their<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    // hbck1s against an hbase2 cluster; it could do damage. To skip this behavior, set<a name="line.941"></a>
-<span class="sourceLineNo">942</span>    // hbase.write.hbck1.lock.file to false.<a name="line.942"></a>
-<span class="sourceLineNo">943</span>    if (this.conf.getBoolean("hbase.write.hbck1.lock.file", true)) {<a name="line.943"></a>
-<span class="sourceLineNo">944</span>      HBaseFsck.checkAndMarkRunningHbck(this.conf,<a name="line.944"></a>
-<span class="sourceLineNo">945</span>          HBaseFsck.createLockRetryCounterFactory(this.conf).create());<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    }<a name="line.946"></a>
-<span class="sourceLineNo">947</span><a name="line.947"></a>
-<span class="sourceLineNo">948</span>    status.setStatus("Initialize ServerManager and schedule SCP for crash servers");<a name="line.948"></a>
-<span class="sourceLineNo">949</span>    this.serverManager = createServerManager(this);<a name="line.949"></a>
-<span class="sourceLineNo">950</span>    createProcedureExecutor();<a name="line.950"></a>
-<span class="sourceLineNo">951</span>    @SuppressWarnings("rawtypes")<a name="line.951"></a>
-<span class="sourceLineNo">952</span>    Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType =<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      procedureExecutor.getActiveProceduresNoCopy().stream()<a name="line.953"></a>
-<span class="sourceLineNo">954</span>        .collect(Collectors.groupingBy(p -&gt; p.getClass()));<a name="line.954"></a>
-<span class="sourceLineNo">955</span><a name="line.955"></a>
-<span class="sourceLineNo">956</span>    checkUnsupportedProcedure(procsByType);<a name="line.956"></a>
-<span class="sourceLineNo">957</span><a name="line.957"></a>
-<span class="sourceLineNo">958</span>    // Create Assignment Manager<a name="line.958"></a>
-<span class="sourceLineNo">959</span>    this.assignmentManager = createAssignmentManager(this);<a name="line.959"></a>
-<span class="sourceLineNo">960</span>    this.assignmentManager.start();<a name="line.960"></a>
-<span class="sourceLineNo">961</span>    // TODO: TRSP can perform as the sub procedure for other procedures, so even if it is marked as<a name="line.961"></a>
-<span class="sourceLineNo">962</span>    // completed, it could still be in the procedure list. This is a bit strange but is another<a name="line.962"></a>
-<span class="sourceLineNo">963</span>    // story, need to verify the implementation for ProcedureExecutor and ProcedureStore.<a name="line.963"></a>
-<span class="sourceLineNo">964</span>    List&lt;TransitRegionStateProcedure&gt; ritList =<a name="line.964"></a>
-<span class="sourceLineNo">965</span>      procsByType.getOrDefault(TransitRegionStateProcedure.class, Collections.emptyList()).stream()<a name="line.965"></a>
-<span class="sourceLineNo">966</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p)<a name="line.966"></a>
-<span class="sourceLineNo">967</span>        .collect(Collectors.toList());<a name="line.967"></a>
-<span class="sourceLineNo">968</span>    this.assignmentManager.setupRIT(ritList);<a name="line.968"></a>
-<span class="sourceLineNo">969</span><a name="line.969"></a>
-<span class="sourceLineNo">970</span>    // Start RegionServerTracker with listing of servers found with exiting SCPs -- these should<a name="line.970"></a>
-<span class="sourceLineNo">971</span>    // be registered in the deadServers set -- and with the list of servernames out on the<a name="line.971"></a>
-<span class="sourceLineNo">972</span>    // filesystem that COULD BE 'alive' (we'll schedule SCPs for each and let SCP figure it out).<a name="line.972"></a>
-<span class="sourceLineNo">973</span>    // We also pass dirs that are already 'splitting'... so we can do some checks down in tracker.<a name="line.973"></a>
-<span class="sourceLineNo">974</span>    // TODO: Generate the splitting and live Set in one pass instead of two as we currently do.<a name="line.974"></a>
-<span class="sourceLineNo">975</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.975"></a>
-<span class="sourceLineNo">976</span>    this.regionServerTracker.start(<a name="line.976"></a>
-<span class="sourceLineNo">977</span>      procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.977"></a>
-<span class="sourceLineNo">978</span>        .map(p -&gt; (ServerCrashProcedure) p).map(p -&gt; p.getServerName()).collect(Collectors.toSet()),<a name="line.978"></a>
-<span class="sourceLineNo">979</span>      walManager.getLiveServersFromWALDir(), walManager.getSplittingServersFromWALDir());<a name="line.979"></a>
-<span class="sourceLineNo">980</span>    // This manager will be started AFTER hbase:meta is confirmed on line.<a name="line.980"></a>
-<span class="sourceLineNo">981</span>    // hbase.mirror.table.state.to.zookeeper is so hbase1 clients can connect. They read table<a name="line.981"></a>
-<span class="sourceLineNo">982</span>    // state from zookeeper while hbase2 reads it from hbase:meta. Disable if no hbase1 clients.<a name="line.982"></a>
-<span class="sourceLineNo">983</span>    this.tableStateManager =<a name="line.983"></a>
-<span class="sourceLineNo">984</span>      this.conf.getBoolean(MirroringTableStateManager.MIRROR_TABLE_STATE_TO_ZK_KEY, true)<a name="line.984"></a>
-<span class="sourceLineNo">985</span>        ?<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        new MirroringTableStateManager(this):<a name="line.986"></a>
-<span class="sourceLineNo">987</span>        new TableStateManager(this);<a name="line.987"></a>
-<span class="sourceLineNo">988</span><a name="line.988"></a>
-<span class="sourceLineNo">989</span>    status.setStatus("Initializing ZK system trackers");<a name="line.989"></a>
-<span class="sourceLineNo">990</span>    initializeZKBasedSystemTrackers();<a name="line.990"></a>
-<span class="sourceLineNo">991</span>    status.setStatus("Loading last flushed sequence id of regions");<a name="line.991"></a>
-<span class="sourceLineNo">992</span>    try {<a name="line.992"></a>
-<span class="sourceLineNo">993</span>      this.serverManager.loadLastFlushedSequenceIds();<a name="line.993"></a>
-<span class="sourceLineNo">994</span>    } catch (IOException e) {<a name="line.994"></a>
-<span class="sourceLineNo">995</span>      LOG.debug("Failed to load last flushed sequence id of regions"<a name="line.995"></a>
-<span class="sourceLineNo">996</span>          + " from file system", e);<a name="line.996"></a>
-<span class="sourceLineNo">997</span>    }<a name="line.997"></a>
-<span class="sourceLineNo">998</span>    // Set ourselves as active Master now our claim has succeeded up in zk.<a name="line.998"></a>
-<span class="sourceLineNo">999</span>    this.activeMaster = true;<a name="line.999"></a>
-<span class="sourceLineNo">1000</span><a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>    // This is for backwards compatibility<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>    // See HBASE-11393<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>    ReplicationPeerConfigUpgrader tableCFsUpdater =<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>        new ReplicationPeerConfigUpgrader(zooKeeper, conf);<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>    tableCFsUpdater.copyTableCFs();<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span><a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>    if (!maintenanceMode) {<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>      // Add the Observer to delete quotas on table deletion before starting all CPs by<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>      // default with quota support, avoiding if user specifically asks to not load this Observer.<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>      if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>        updateConfigurationForQuotasObserver(conf);<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>      }<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      // initialize master side coprocessors before we start handling requests<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>      status.setStatus("Initializing master coprocessors");<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>      this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>    }<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span><a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>    // Checking if meta needs initializing.<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    status.setStatus("Initializing meta table if this is a new deploy");<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>    InitMetaProcedure initMetaProc = null;<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>    // Print out state of hbase:meta on startup; helps debugging.<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>    RegionState rs = this.assignmentManager.getRegionStates().<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>        getRegionState(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>    LOG.info("hbase:meta {}", rs);<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>    if (rs.isOffline()) {<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>      Optional&lt;InitMetaProcedure&gt; optProc = procedureExecutor.getProcedures().stream()<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>        .filter(p -&gt; p instanceof InitMetaProcedure).map(o -&gt; (InitMetaProcedure) o).findAny();<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>      initMetaProc = optProc.orElseGet(() -&gt; {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>        // schedule an init meta procedure if meta has not been deployed yet<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>        InitMetaProcedure temp = new InitMetaProcedure();<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>        procedureExecutor.submitProcedure(temp);<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        return temp;<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      });<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>    }<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>    if (this.balancer instanceof FavoredNodesPromoter) {<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>      favoredNodesManager = new FavoredNodesManager(this);<a name="line.1037"></a>
+<span class="sourceLineNo">926</span>    // enable table descriptors cache<a name="line.926"></a>
+<span class="sourceLineNo">927</span>    this.tableDescriptors.setCacheOn();<a name="line.927"></a>
+<span class="sourceLineNo">928</span><a name="line.928"></a>
+<span class="sourceLineNo">929</span>    // warm-up HTDs cache on master initialization<a name="line.929"></a>
+<span class="sourceLineNo">930</span>    if (preLoadTableDescriptors) {<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      status.setStatus("Pre-loading table descriptors");<a name="line.931"></a>
+<span class="sourceLineNo">932</span>      this.tableDescriptors.getAll();<a name="line.932"></a>
+<span class="sourceLineNo">933</span>    }<a name="line.933"></a>
+<span class="sourceLineNo">934</span><a name="line.934"></a>
+<span class="sourceLineNo">935</span>    // Publish cluster ID; set it in Master too. The superclass RegionServer does this later but<a name="line.935"></a>
+<span class="sourceLineNo">936</span>    // only after it has checked in with the Master. At least a few tests ask Master for clusterId<a name="line.936"></a>
+<span class="sourceLineNo">937</span>    // before it has called its run method and before RegionServer has done the reportForDuty.<a name="line.937"></a>
+<span class="sourceLineNo">938</span>    ClusterId clusterId = fileSystemManager.getClusterId();<a name="line.938"></a>
+<span class="sourceLineNo">939</span>    status.setStatus("Publishing Cluster ID " + clusterId + " in ZooKeeper");<a name="line.939"></a>
+<span class="sourceLineNo">940</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.940"></a>
+<span class="sourceLineNo">941</span>    this.clusterId = clusterId.toString();<a name="line.941"></a>
+<span class="sourceLineNo">942</span><a name="line.942"></a>
+<span class="sourceLineNo">943</span>    // Precaution. Put in place the old hbck1 lock file to fence out old hbase1s running their<a name="line.943"></a>
+<span class="sourceLineNo">944</span>    // hbck1s against an hbase2 cluster; it could do damage. To skip this behavior, set<a name="line.944"></a>
+<span class="sourceLineNo">945</span>    // hbase.write.hbck1.lock.file to false.<a name="line.945"></a>
+<span class="sourceLineNo">946</span>    if (this.conf.getBoolean("hbase.write.hbck1.lock.file", true)) {<a name="line.946"></a>
+<span class="sourceLineNo">947</span>      HBaseFsck.checkAndMarkRunningHbck(this.conf,<a name="line.947"></a>
+<span class="sourceLineNo">948</span>          HBaseFsck.createLockRetryCounterFactory(this.conf).create());<a name="line.948"></a>
+<span class="sourceLineNo">949</span>    }<a name="line.949"></a>
+<span class="sourceLineNo">950</span><a name="line.950"></a>
+<span class="sourceLineNo">951</span>    status.setStatus("Initialize ServerManager and schedule SCP for crash servers");<a name="line.951"></a>
+<span class="sourceLineNo">952</span>    this.serverManager = createServerManager(this);<a name="line.952"></a>
+<span class="sourceLineNo">953</span>    createProcedureExecutor();<a name="line.953"></a>
+<span class="sourceLineNo">954</span>    @SuppressWarnings("rawtypes")<a name="line.954"></a>
+<span class="sourceLineNo">955</span>    Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType =<a name="line.955"></a>
+<span class="sourceLineNo">956</span>      procedureExecutor.getActiveProceduresNoCopy().stream()<a name="line.956"></a>
+<span class="sourceLineNo">957</span>        .collect(Collectors.groupingBy(p -&gt; p.getClass()));<a name="line.957"></a>
+<span class="sourceLineNo">958</span><a name="line.958"></a>
+<span class="sourceLineNo">959</span>    checkUnsupportedProcedure(procsByType);<a name="line.959"></a>
+<span class="sourceLineNo">960</span><a name="line.960"></a>
+<span class="sourceLineNo">961</span>    // Create Assignment Manager<a name="line.961"></a>
+<span class="sourceLineNo">962</span>    this.assignmentManager = createAssignmentManager(this);<a name="line.962"></a>
+<span class="sourceLineNo">963</span>    this.assignmentManager.start();<a name="line.963"></a>
+<span class="sourceLineNo">964</span>    // TODO: TRSP can perform as the sub procedure for other procedures, so even if it is marked as<a name="line.964"></a>
+<span class="sourceLineNo">965</span>    // completed, it could still be in the procedure list. This is a bit strange but is another<a name="line.965"></a>
+<span class="sourceLineNo">966</span>    // story, need to verify the implementation for ProcedureExecutor and ProcedureStore.<a name="line.966"></a>
+<span class="sourceLineNo">967</span>    List&lt;TransitRegionStateProcedure&gt; ritList =<a name="line.967"></a>
+<span class="sourceLineNo">968</span>      procsByType.getOrDefault(TransitRegionStateProcedure.class, Collections.emptyList()).stream()<a name="line.968"></a>
+<span class="sourceLineNo">969</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p)<a name="line.969"></a>
+<span class="sourceLineNo">970</span>        .collect(Collectors.toList());<a name="line.970"></a>
+<span class="sourceLineNo">971</span>    this.assignmentManager.setupRIT(ritList);<a name="line.971"></a>
+<span class="sourceLineNo">972</span><a name="line.972"></a>
+<span class="sourceLineNo">973</span>    // Start RegionServerTracker with listing of servers found with exiting SCPs -- these should<a name="line.973"></a>
+<span class="sourceLineNo">974</span>    // be registered in the deadServers set -- and with the list of servernames out on the<a name="line.974"></a>
+<span class="sourceLineNo">975</span>    // filesystem that COULD BE 'alive' (we'll schedule SCPs for each and let SCP figure it out).<a name="line.975"></a>
+<span class="sourceLineNo">976</span>    // We also pass dirs that are already 'splitting'... so we can do some checks down in tracker.<a name="line.976"></a>
+<span class="sourceLineNo">977</span>    // TODO: Generate the splitting and live Set in one pass instead of two as we currently do.<a name="line.977"></a>
+<span class="sourceLineNo">978</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.978"></a>
+<span class="sourceLineNo">979</span>    this.regionServerTracker.start(<a name="line.979"></a>
+<span class="sourceLineNo">980</span>      procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.980"></a>
+<span class="sourceLineNo">981</span>        .map(p -&gt; (ServerCrashProcedure) p).map(p -&gt; p.getServerName()).collect(Collectors.toSet()),<a name="line.981"></a>
+<span class="sourceLineNo">982</span>      walManager.getLiveServersFromWALDir(), walManager.getSplittingServersFromWALDir());<a name="line.982"></a>
+<span class="sourceLineNo">983</span>    // This manager will be started AFTER hbase:meta is confirmed on line.<a name="line.983"></a>
+<span class="sourceLineNo">984</span>    // hbase.mirror.table.state.to.zookeeper is so hbase1 clients can connect. They read table<a name="line.984"></a>
+<span class="sourceLineNo">985</span>    // state from zookeeper while hbase2 reads it from hbase:meta. Disable if no hbase1 clients.<a name="line.985"></a>
+<span class="sourceLineNo">986</span>    this.tableStateManager =<a name="line.986"></a>
+<span class="sourceLineNo">987</span>      this.conf.getBoolean(MirroringTableStateManager.MIRROR_TABLE_STATE_TO_ZK_KEY, true)<a name="line.987"></a>
+<span class="sourceLineNo">988</span>        ?<a name="line.988"></a>
+<span class="sourceLineNo">989</span>        new MirroringTableStateManager(this):<a name="line.989"></a>
+<span class="sourceLineNo">990</span>        new TableStateManager(this);<a name="line.990"></a>
+<span class="sourceLineNo">991</span><a name="line.991"></a>
+<span class="sourceLineNo">992</span>    status.setStatus("Initializing ZK system trackers");<a name="line.992"></a>
+<span class="sourceLineNo">993</span>    initializeZKBasedSystemTrackers();<a name="line.993"></a>
+<span class="sourceLineNo">994</span>    status.setStatus("Loading last flushed sequence id of regions");<a name="line.994"></a>
+<span class="sourceLineNo">995</span>    try {<a name="line.995"></a>
+<span class="sourceLineNo">996</span>      this.serverManager.loadLastFlushedSequenceIds();<a name="line.996"></a>
+<span class="sourceLineNo">997</span>    } catch (IOException e) {<a name="line.997"></a>
+<span class="sourceLineNo">998</span>      LOG.debug("Failed to load last flushed sequence id of regions"<a name="line.998"></a>
+<span class="sourceLineNo">999</span>          + " from file system", e);<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>    }<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>    // Set ourselves as active Master now our claim has succeeded up in zk.<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>    this.activeMaster = true;<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span><a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>    // This is for backwards compatibility<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>    // See HBASE-11393<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>    ReplicationPeerConfigUpgrader tableCFsUpdater =<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>        new ReplicationPeerConfigUpgrader(zooKeeper, conf);<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>    tableCFsUpdater.copyTableCFs();<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span><a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>    if (!maintenanceMode) {<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>      // Add the Observer to delete quotas on table deletion before starting all CPs by<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>      // default with quota support, avoiding if user specifically asks to not load this Observer.<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>      if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>        updateConfigurationForQuotasObserver(conf);<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>      }<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>      // initialize master side coprocessors before we start handling requests<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>      status.setStatus("Initializing master coprocessors");<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>      this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>    }<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span><a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>    // Checking if meta needs initializing.<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>    status.setStatus("Initializing meta table if this is a new deploy");<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>    InitMetaProcedure initMetaProc = null;<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>    // Print out state of hbase:meta on startup; helps debugging.<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>    RegionState rs = this.assignmentManager.getRegionStates().<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>        getRegionState(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>    LOG.info("hbase:meta {}", rs);<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>    if (rs.isOffline()) {<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>      Optional&lt;InitMetaProcedure&gt; optProc = procedureExecutor.getProcedures().stream()<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>        .filter(p -&gt; p instanceof InitMetaProcedure).map(o -&gt; (InitMetaProcedure) o).findAny();<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      initMetaProc = optProc.orElseGet(() -&gt; {<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>        // schedule an init meta procedure if meta has not been deployed yet<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>        InitMetaProcedure temp = new InitMetaProcedure();<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>        procedureExecutor.submitProcedure(temp);<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>        return temp;<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>      });<a name="line.1037"></a>
 <span class="sourceLineNo">1038</span>    }<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span><a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>    // initialize load balancer<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>    this.balancer.setMasterServices(this);<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>    this.balancer.initialize();<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span><a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    // start up all service threads.<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    status.setStatus("Initializing master service threads");<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>    startServiceThreads();<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>    // wait meta to be initialized after we start procedure executor<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    if (initMetaProc != null) {<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>      initMetaProc.await();<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>    }<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    // Wake up this server to check in<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    sleeper.skipSleepCycle();<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span><a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    // Wait for region servers to report in.<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>    // With this as part of master initialization, it precludes our being able to start a single<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    // server that is both Master and RegionServer. Needs more thought. TODO.<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    String statusStr = "Wait for region servers to report in";<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    status.setStatus(statusStr);<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>    LOG.info(Objects.toString(status));<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>    waitForRegionServers(status);<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span><a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>    // Check if master is shutting down because issue initializing regionservers or balancer.<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    if (isStopped()) {<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>      return;<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    }<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span><a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    status.setStatus("Starting assignment manager");<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>    // FIRST HBASE:META READ!!!!<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    // The below cannot make progress w/o hbase:meta being online.<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    // This is the FIRST attempt at going to hbase:meta. Meta on-lining is going on in background<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    // as procedures run -- in particular SCPs for crashed servers... One should put up hbase:meta<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    // if it is down. It may take a while to come online. So, wait here until meta if for sure<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    // available. That's what waitForMetaOnline does.<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    if (!waitForMetaOnline()) {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>      return;<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    }<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>    this.assignmentManager.joinCluster();<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    // The below depends on hbase:meta being online.<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    this.tableStateManager.start();<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>    // Initialize after meta is up as below scans meta<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    if (favoredNodesManager != null &amp;&amp; !maintenanceMode) {<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>      SnapshotOfRegionAssignmentFromMeta snapshotOfRegionAssignment =<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>          new SnapshotOfRegionAssignmentFromMeta(getConnection());<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>      snapshotOfRegionAssignment.initialize();<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>      favoredNodesManager.initialize(snapshotOfRegionAssignment);<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>    }<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span><a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    // set cluster status again after user regions are assigned<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1090"></a>
+<span class="sourceLineNo">1039</span>    if (this.balancer instanceof FavoredNodesPromoter) {<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>      favoredNodesManager = new FavoredNodesManager(this);<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>    }<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span><a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>    // initialize load balancer<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>    this.balancer.setMasterServices(this);<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>    this.balancer.initialize();<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span><a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>    // start up all service threads.<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>    status.setStatus("Initializing master service threads");<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>    startServiceThreads();<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>    // wait meta to be initialized after we start procedure executor<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>    if (initMetaProc != null) {<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>      initMetaProc.await();<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>    }<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>    // Wake up this server to check in<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>    sleeper.skipSleepCycle();<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span><a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>    // Wait for region servers to report in.<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>    // With this as part of master initialization, it precludes our being able to start a single<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>    // server that is both Master and RegionServer. Needs more thought. TODO.<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    String statusStr = "Wait for region servers to report in";<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>    status.setStatus(statusStr);<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>    LOG.info(Objects.toString(status));<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>    waitForRegionServers(status);<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span><a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    // Check if master is shutting down because issue initializing regionservers or balancer.<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>    if (isStopped()) {<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>      return;<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>    }<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span><a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>    status.setStatus("Starting assignment manager");<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>    // FIRST HBASE:META READ!!!!<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>    // The below cannot make progress w/o hbase:meta being online.<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    // This is the FIRST attempt at going to hbase:meta. Meta on-lining is going on in background<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    // as procedures run -- in particular SCPs for crashed servers... One should put up hbase:meta<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    // if it is down. It may take a while to come online. So, wait here until meta if for sure<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    // available. That's what waitForMetaOnline does.<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>    if (!waitForMetaOnline()) {<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      return;<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>    }<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>    this.assignmentManager.joinCluster();<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>    // The below depends on hbase:meta being online.<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>    this.tableStateManager.start();<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>    // Initialize after meta is up as below scans meta<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    if (favoredNodesManager != null &amp;&amp; !maintenanceMode) {<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>      SnapshotOfRegionAssignmentFromMeta snapshotOfRegionAssignment =<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>          new SnapshotOfRegionAssignmentFromMeta(getConnection());<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      snapshotOfRegionAssignment.initialize();<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>      favoredNodesManager.initialize(snapshotOfRegionAssignment);<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>    }<a name="line.1090"></a>
 <span class="sourceLineNo">1091</span><a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>    this.balancerChore = new BalancerChore(this);<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>    getChoreService().scheduleChore(balancerChore);<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>    this.catalogJanitorChore = new CatalogJanitor(this);<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    this.serverManager.startChore();<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span><a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>    // NAMESPACE READ!!!!<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    // Here we expect hbase:namespace to be online. See inside initClusterSchemaService.<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    // TODO: Fix this. Namespace is a pain being a sort-of system table. Fold it in to hbase:meta.<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    // isNamespace does like isMeta and waits until namespace is onlined before allowing progress.<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    if (!waitForNamespaceOnline()) {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      return;<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    }<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>    status.setStatus("Starting cluster schema service");<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>    initClusterSchemaService();<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span><a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>    if (this.cpHost != null) {<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>      try {<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>        this.cpHost.preMasterInitialization();<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>      } catch (IOException e) {<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<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><a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>    status.markComplete("Initialization successful");<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    LOG.info(String.format("Master has completed initialization %.3fsec",<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>       (System.currentTimeMillis() - masterActiveTime) / 1000.0f));<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    this.masterFinishedInitializationTime = System.currentTimeMillis();<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>    configurationManager.registerObserver(this.balancer);<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    configurationManager.registerObserver(this.hfileCleaner);<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>    configurationManager.registerObserver(this.logCleaner);<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    // Set master as 'initialized'.<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>    setInitialized(true);<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span><a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    if (maintenanceMode) {<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>      LOG.info("Detected repair mode, skipping final initialization steps.");<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>      return;<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>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>    status.setStatus("Assign meta replicas");<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap();<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>    metaBootstrap.assignMetaReplicas();<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>    status.setStatus("Starting quota manager");<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>    initQuotaManager();<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>      // Create the quota snapshot notifier<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>      spaceQuotaSnapshotNotifier = createQuotaSnapshotNotifier();<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>      spaceQuotaSnapshotNotifier.initialize(getClusterConnection());<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>      this.quotaObserverChore = new QuotaObserverChore(this, getMasterMetrics());<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>      // Start the chore to read the region FS space reports and act on them<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>      getChoreService().scheduleChore(quotaObserverChore);<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span><a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>      this.snapshotQuotaChore = new SnapshotQuotaObserverChore(this, getMasterMetrics());<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>      // Start the chore to read snapshots and add their usage to table/NS quotas<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>      getChoreService().scheduleChore(snapshotQuotaChore);<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>    // clear the dead servers with same host name and port of online server because we are not<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    // removing dead server with same hostname and port of rs which is trying to check in before<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>    // master initialization. See HBASE-5916.<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    this.serverManager.clearDeadServersWithSameHostNameAndPortOfOnlineServer();<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span><a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    // Check and set the znode ACLs if needed in case we are overtaking a non-secure configuration<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>    status.setStatus("Checking ZNode ACLs");<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>    zooKeeper.checkAndSetZNodeAcls();<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span><a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    status.setStatus("Initializing MOB Cleaner");<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>    initMobCleaner();<a name="line.1166"></a>
+<span class="sourceLineNo">1092</span>    // set cluster status again after user regions are assigned<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span><a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>    this.balancerChore = new BalancerChore(this);<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>    getChoreService().scheduleChore(balancerChore);<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>    this.catalogJanitorChore = new CatalogJanitor(this);<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>    this.serverManager.startChore();<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span><a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>    // NAMESPACE READ!!!!<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    // Here we expect hbase:namespace to be online. See inside initClusterSchemaService.<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>    // TODO: Fix this. Namespace is a pain being a sort-of system table. Fold it in to hbase:meta.<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>    // isNamespace does like isMeta and waits until namespace is onlined before allowing progress.<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>    if (!waitForNamespaceOnline()) {<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>      return;<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>    }<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>    status.setStatus("Starting cluster schema service");<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>    initClusterSchemaService();<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span><a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>    if (this.cpHost != null) {<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>      try {<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>        this.cpHost.preMasterInitialization();<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>      } catch (IOException e) {<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<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><a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>    status.markComplete("Initialization successful");<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>    LOG.info(String.format("Master has completed initialization %.3fsec",<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>       (System.currentTimeMillis() - masterActiveTime) / 1000.0f));<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    this.masterFinishedInitializationTime = System.currentTimeMillis();<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>    configurationManager.registerObserver(this.balancer);<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>    configurationManager.registerObserver(this.hfileCleaner);<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    configurationManager.registerObserver(this.logCleaner);<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>    // Set master as 'initialized'.<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    setInitialized(true);<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span><a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>    if (maintenanceMode) {<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>      LOG.info("Detected repair mode, skipping final initialization steps.");<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>      return;<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>    }<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span><a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>    status.setStatus("Assign meta replicas");<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap();<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>    metaBootstrap.assignMetaReplicas();<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>    status.setStatus("Starting quota manager");<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>    initQuotaManager();<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>      // Create the quota snapshot notifier<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>      spaceQuotaSnapshotNotifier = createQuotaSnapshotNotifier();<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>      spaceQuotaSnapshotNotifier.initialize(getClusterConnection());<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>      this.quotaObserverChore = new QuotaObserverChore(this, getMasterMetrics());<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>      // Start the chore to read the region FS space reports and act on them<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>      getChoreService().scheduleChore(quotaObserverChore);<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span><a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>      this.snapshotQuotaChore = new SnapshotQuotaObserverChore(this, getMasterMetrics());<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>      // Start the chore to read snapshots and add their usage to table/NS quotas<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>      getChoreService().scheduleChore(snapshotQuotaChore);<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>    }<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span><a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>    // clear the dead servers with same host name and port of online server because we are not<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>    // removing dead server with same hostname and port of rs which is trying to check in before<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>    // master initialization. See HBASE-5916.<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>    this.serverManager.clearDeadServersWithSameHostNameAndPortOfOnlineServer();<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span><a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>    // Check and set the znode ACLs if needed in case we are overtaking a non-secure configuration<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>    status.setStatus("Checking ZNode ACLs");<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>    zooKeeper.checkAndSetZNodeAcls();<a name="line.1166"></a>
 <span class="sourceLineNo">1167</span><a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>    status.setStatus("Calling postStartMaster coprocessors");<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    if (this.cpHost != null) {<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>      // don't let cp initialization errors kill the master<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>      try {<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>        this.cpHost.postStartMaster();<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>      } catch (IOException ioe) {<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>        LOG.error("Coprocessor postStartMaster() hook failed", ioe);<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>      }<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>    }<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span><a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>    zombieDetector.interrupt();<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span><a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>    /*<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>     * After master has started up, lets do balancer post startup initialization. Since this runs<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>     * in activeMasterManager thread, it should be fine.<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>     */<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>    long start = System.currentTimeMillis();<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    this.balancer.postMasterStartupInitialize();<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    if (LOG.isDebugEnabled()) {<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>      LOG.debug("Balancer post startup initialization complete, took " + (<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>          (System.currentTimeMillis() - start) / 1000) + " seconds");<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>   * Check hbase:meta is up and ready for reading. For use during Master startup only.<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>   * @return True if meta is UP and online and startup can progress. Otherwise, meta is not online<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>   *   and we will hold here until operator intervention.<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>   */<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>  @VisibleForTesting<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>  public boolean waitForMetaOnline() throws InterruptedException {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>    return isRegionOnline(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>  }<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>   * @return True if region is online and scannable else false if an error or shutdown (Otherwise<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>   *   we just block in here holding up all forward-progess).<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>   */<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>  private boolean isRegionOnline(RegionInfo ri) throws InterruptedException {<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>    RetryCounter rc = null;<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>    while (!isStopped()) {<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>      RegionState rs = this.assignmentManager.getRegionStates().getRegionState(ri);<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>      if (rs.isOpened()) {<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>        if (this.getServerManager().isServerOnline(rs.getServerName())) {<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>          return true;<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>        }<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>      }<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>      // Region is not OPEN.<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>      Optional&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; optProc = this.procedureExecutor.getProcedures().<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>          stream().filter(p -&gt; p instanceof ServerCrashProcedure).findAny();<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      // TODO: Add a page to refguide on how to do repair. Have this log message point to it.<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>      // Page will talk about loss of edits, how to schedule at least the meta WAL recovery, and<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>      // then how to assign including how to break region lock if one held.<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>      LOG.warn("{} is NOT online; state={}; ServerCrashProcedures={}. Master startup cannot " +<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>          "progress, in holding-pattern until region onlined.",<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>          ri.getRegionNameAsString(), rs, optProc.isPresent());<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>      // Check once-a-minute.<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>      if (rc == null) {<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>        rc = new RetryCounterFactory(1000).create();<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>      }<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>      Threads.sleep(rc.getBackoffTimeAndIncrementAttempts());<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>    }<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>    return false;<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>   * Check hbase:namespace table is assigned. If not, startup will hang looking for the ns table<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>   * (TODO: Fix this! NS should not hold-up startup).<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>   * @return True if namespace table is up/online.<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>   */<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>  @VisibleForTesting<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>  public boolean waitForNamespaceOnline() throws InterruptedException {<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>    List&lt;RegionInfo&gt; ris = this.assignmentManager.getRegionStates().<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>        getRegionsOfTable(TableName.NAMESPACE_TABLE_NAME);<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>    if (ris.isEmpty()) {<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>      // If empty, means we've not assigned the namespace table yet... Just return true so startup<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>      // continues and the namespace table gets created.<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>      return true;<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>    }<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>    // Else there are namespace regions up in meta. Ensure they are assigned before we go on.<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>    for (RegionInfo ri: ris) {<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>      isRegionOnline(ri);<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>    }<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>    return true;<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>  }<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span><a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>  /**<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>   * Adds the {@code MasterQuotasObserver} to the list of configured Master observers to<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>   * automatically remove quotas for a table when that table is deleted.<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>   */<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>  @VisibleForTesting<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>  public void updateConfigurationForQuotasObserver(Configuration conf) {<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>    // We're configured to not delete quotas on table deletion, so we don't need to add the obs.<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>    if (!conf.getBoolean(<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>          MasterQuotasObserver.REMOVE_QUOTA_ON_TABLE_DELETE,<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>          MasterQuotasObserver.REMOVE_QUOTA_ON_TABLE_DELETE_DEFAULT)) {<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>      return;<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>    }<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>    String[] masterCoprocs = conf.getStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY);<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>    final int length = null == masterCoprocs ? 0 : masterCoprocs.length;<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>    String[] updatedCoprocs = new String[length + 1];<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>    if (length &gt; 0) {<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>      System.arraycopy(masterCoprocs, 0, updatedCoprocs, 0, masterCoprocs.length);<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>    }<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>    updatedCoprocs[length] = MasterQuotasObserver.class.getName();<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>    conf.setStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, updatedCoprocs);<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>  }<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span><a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>  private void initMobCleaner() {<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>    this.expiredMobFileCleanerChore = new ExpiredMobFileCleanerChore(this);<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>    getChoreService().scheduleChore(expiredMobFileCleanerChore);<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span><a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>    int mobCompactionPeriod = conf.getInt(MobConstants.MOB_COMPACTION_CHORE_PERIOD,<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>        MobConstants.DEFAULT_MOB_COMPACTION_CHORE_PERIOD);<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>    if (mobCompactionPeriod &gt; 0) {<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>      this.mobCompactChore = new MobCompactionChore(this, mobCompactionPeriod);<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>      getChoreService().scheduleChore(mobCompactChore);<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>    } else {<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>      LOG<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>        .info("The period is " + mobCompactionPeriod + " seconds, MobCompactionChore is disabled");<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>    }<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>    this.mobCompactThread = new MasterMobCompactionThread(this);<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>  }<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span><a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>  /**<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>   * &lt;p&gt;<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>   * Create a {@link MasterMetaBootstrap} instance.<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>   * &lt;/p&gt;<a name="line.1295"></a>
+<span class="sourceLineNo">1168</span>    status.setStatus("Initializing MOB Cleaner");<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>    initMobCleaner();<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span><a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>    status.setStatus("Calling postStartMaster coprocessors");<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>    if (this.cpHost != null) {<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>      // don't let cp initialization errors kill the master<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>      try {<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>        this.cpHost.postStartMaster();<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>      } catch (IOException ioe) {<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>        LOG.error("Coprocessor postStartMaster() hook failed", ioe);<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>      }<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>    }<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span><a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>    zombieDetector.interrupt();<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>     * After master has started up, lets do balancer post startup initialization. Since this runs<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>     * in activeMasterManager thread, it should be fine.<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>     */<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>    long start = System.currentTimeMillis();<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>    this.balancer.postMasterStartupInitialize();<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>    if (LOG.isDebugEnabled()) {<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>      LOG.debug("Balancer post startup initialization complete, took " + (<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>          (System.currentTimeMillis() - start) / 1000) + " seconds");<a name="line.1191"></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><a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>  /**<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>   * Check hbase:meta is up and ready for reading. For use during Master startup only.<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>   * @return True if meta is UP and online and startup can progress. Otherwise, meta is not online<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>   *   and we will hold here until operator intervention.<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>   */<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>  @VisibleForTesting<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>  public boolean waitForMetaOnline() throws InterruptedException {<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    return isRegionOnline(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>  }<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>   * @return True if region is online and scannable else false if an error or shutdown (Otherwise<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>   *   we just block in here holding up all forward-progess).<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>   */<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>  private boolean isRegionOnline(RegionInfo ri) throws InterruptedException {<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>    RetryCounter rc = null;<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>    while (!isStopped()) {<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>      RegionState rs = this.assignmentManager.getRegionStates().getRegionState(ri);<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>      if (rs.isOpened()) {<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>        if (this.getServerManager().isServerOnline(rs.getServerName())) {<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>          return true;<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>        }<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>      }<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>      // Region is not OPEN.<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      Optional&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; optProc = this.procedureExecutor.getProcedures().<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>          stream().filter(p -&gt; p instanceof ServerCrashProcedure).findAny();<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>      // TODO: Add a page to refguide on how to do repair. Have this log message point to it.<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>      // Page will talk about loss of edits, how to schedule at least the meta WAL recovery, and<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>      // then how to assign including how to break region lock if one held.<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>      LOG.warn("{} is NOT online; state={}; ServerCrashProcedures={}. Master startup cannot " +<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>          "progress, in holding-pattern until region onlined.",<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>          ri.getRegionNameAsString(), rs, optProc.isPresent());<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>      // Check once-a-minute.<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      if (rc == null) {<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>        rc = new RetryCounterFactory(1000).create();<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>      }<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>      Threads.sleep(rc.getBackoffTimeAndIncrementAttempts());<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>    }<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>    return false;<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>  /**<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>   * Check hbase:namespace table is assigned. If not, startup will hang looking for the ns table<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>   * (TODO: Fix this! NS should not hold-up startup).<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>   * @return True if namespace table is up/online.<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>   */<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>  @VisibleForTesting<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>  public boolean waitForNamespaceOnline() throws InterruptedException {<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>    List&lt;RegionInfo&gt; ris = this.assignmentManager.getRegionStates().<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>        getRegionsOfTable(TableName.NAMESPACE_TABLE_NAME);<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>    if (ris.isEmpty()) {<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>      // If empty, means we've not assigned the namespace table yet... Just return true so startup<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>      // continues and the namespace table gets created.<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>      return true;<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>    }<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>    // Else there are namespace regions up in meta. Ensure they are assigned before we go on.<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>    for (RegionInfo ri: ris) {<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>      isRegionOnline(ri);<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>    }<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>    return true;<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>  }<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span><a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>  /**<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>   * Adds the {@code MasterQuotasObserver} to the list of configured Master observers to<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>   * automatically remove quotas for a table when that table is deleted.<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>   */<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>  @VisibleForTesting<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>  public void updateConfigurationForQuotasObserver(Configuration conf) {<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>    // We're configured to not delete quotas on table deletion, so we don't need to add the obs.<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>    if (!conf.getBoolean(<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>          MasterQuotasObserver.REMOVE_QUOTA_ON_TABLE_DELETE,<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>          MasterQuotasObserver.REMOVE_QUOTA_ON_TABLE_DELETE_DEFAULT)) {<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>      return;<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>    }<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>    String[] masterCoprocs = conf.getStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY);<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>    final int length = null == masterCoprocs ? 0 : masterCoprocs.length;<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>    String[] updatedCoprocs = new String[length + 1];<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>    if (length &gt; 0) {<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>      System.arraycopy(masterCoprocs, 0, updatedCoprocs, 0, masterCoprocs.length);<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>    }<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>    updatedCoprocs[length] = MasterQuotasObserver.class.getName();<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>    conf.setStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, updatedCoprocs);<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>  }<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span><a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>  private void initMobCleaner() {<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>    this.expiredMobFileCleanerChore = new ExpiredMobFileCleanerChore(this);<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>    getChoreService().scheduleChore(expiredMobFileCleanerChore);<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span><a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>    int mobCompactionPeriod = conf.getInt(MobConstants.MOB_COMPACTION_CHORE_PERIOD,<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>        MobConstants.DEFAULT_MOB_COMPACTION_CHORE_PERIOD);<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>    if (mobCompactionPeriod &gt; 0) {<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>      this.mobCompactChore = new MobCompactionChore(this, mobCompactionPeriod);<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>      getChoreService().scheduleChore(mobCompactChore);<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>    } else {<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>      LOG<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>        .info("The period is " + mobCompactionPeriod + " seconds, MobCompactionChore is disabled");<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>    }<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>    this.mobCompactThread = new MasterMobCompactionThread(this);<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>  /**<a name="line.1295"></a>
 <span class="sourceLineNo">1296</span>   * &lt;p&gt;<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>   * Will be overridden in tests.<a name="line.1297"></a>
+<span class="sourceLineNo">1297</span>   * Create a {@link MasterMetaBootstrap} instance.<a name="line.1297"></a>
 <span class="sourceLineNo">1298</span>   * &lt;/p&gt;<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>   */<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>  @VisibleForTesting<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>  protected MasterMetaBootstrap createMetaBootstrap() {<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>    // w/ a mocked up MasterMetaBootstrap.<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>    return new MasterMetaBootstrap(this);<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>  }<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span><a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>  /**<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>   * &lt;p&gt;<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>   * Create a {@link ServerManager} instance.<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>   * &lt;/p&gt;<a name="line.1310"></a>
+<span class="sourceLineNo">1299</span>   * &lt;p&gt;<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>   * Will be overridden in tests.<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>   * &lt;/p&gt;<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>   */<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>  @VisibleForTesting<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>  protected MasterMetaBootstrap createMetaBootstrap() {<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>    // w/ a mocked up MasterMetaBootstrap.<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>    return new MasterMetaBootstrap(this);<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>  }<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span><a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>  /**<a name="line.1310"></a>
 <span class="sourceLineNo">1311</span>   * &lt;p&gt;<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>   * Will be overridden in tests.<a name="line.1312"></a>
+<span class="sourceLineNo">1312</span>   * Create a {@link ServerManager} instance.<a name="line.1312"></a>
 <span class="sourceLineNo">1313</span>   * &lt;/p&gt;<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>   */<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>  @VisibleForTesting<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>  protected ServerManager createServerManager(final MasterServices master) throws IOException {<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>    // w/ a mocked up ServerManager.<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>    setupClusterConnection();<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>    return new ServerManager(master);<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>  }<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span><a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>  private void waitForRegionServers(final MonitoredTask status)<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>      throws IOException, InterruptedException {<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>    this.serverManager.waitForRegionServers(status);<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>  }<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span><a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>  // Will be overridden in tests<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>  @VisibleForTesting<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>  protected void initClusterSchemaService() throws IOException, InterruptedException {<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>    this.clusterSchemaService = new ClusterSchemaServiceImpl(this);<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>    this.clusterSchemaService.startAsync();<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>    try {<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>      this.clusterSchemaService.awaitRunning(getConfiguration().getInt(<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>        HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS,<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>        DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS), TimeUnit.SECONDS);<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    } catch (TimeoutException toe) {<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>      throw new IOException("Timedout starting ClusterSchemaService", toe);<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    }<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>  }<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span><a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>  private void initQuotaManager() throws IOException {<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>    MasterQuotaManager quotaManager = new MasterQuotaManager(this);<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>    quotaManager.start();<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>    this.quotaManager = quotaManager;<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>  }<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span><a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>  private SpaceQuotaSnapshotNotifier createQuotaSnapshotNotifier() {<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    SpaceQuotaSnapshotNotifier notifier =<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>        SpaceQuotaSnapshotNotifierFactory.getInstance().create(getConfiguration());<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    return notifier;<a

<TRUNCATED>

[13/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html
index 21f7b0f..6a5ac20 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html
@@ -143,511 +143,512 @@
 <span class="sourceLineNo">135</span>    return instance;<a name="line.135"></a>
 <span class="sourceLineNo">136</span>  }<a name="line.136"></a>
 <span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>  static ChunkCreator getInstance() {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    return instance;<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>  /**<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * Creates and inits a chunk. The default implementation for a specific chunk size.<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * @return the chunk that was initialized<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   */<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  Chunk getChunk(ChunkType chunkType) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    return getChunk(CompactingMemStore.IndexType.ARRAY_MAP, chunkType);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>  /**<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * Creates and inits a chunk. The default implementation.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * @return the chunk that was initialized<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   */<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  Chunk getChunk() {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    return getChunk(CompactingMemStore.IndexType.ARRAY_MAP, ChunkType.DATA_CHUNK);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  }<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>   * Creates and inits a chunk. The default implementation for a specific index type.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * @return the chunk that was initialized<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   */<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  Chunk getChunk(CompactingMemStore.IndexType chunkIndexType) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    return getChunk(chunkIndexType, ChunkType.DATA_CHUNK);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>  /**<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   * Creates and inits a chunk with specific index type and type.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * @return the chunk that was initialized<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   */<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  Chunk getChunk(CompactingMemStore.IndexType chunkIndexType, ChunkType chunkType) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    switch (chunkType) {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      case INDEX_CHUNK:<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        if (indexChunksPool != null) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>          return getChunk(chunkIndexType, indexChunksPool.getChunkSize());<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        }<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      case DATA_CHUNK:<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        if (dataChunksPool == null) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>          return getChunk(chunkIndexType, chunkSize);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        } else {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>          return getChunk(chunkIndexType, dataChunksPool.getChunkSize());<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        }<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      default:<a name="line.182"></a>
-<span class="sourceLineNo">183</span>        throw new IllegalArgumentException(<a name="line.183"></a>
-<span class="sourceLineNo">184</span>                "chunkType must either be INDEX_CHUNK or DATA_CHUNK");<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>  }<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>  /**<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   * Creates and inits a chunk.<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * @return the chunk that was initialized<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * @param chunkIndexType whether the requested chunk is going to be used with CellChunkMap index<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * @param size the size of the chunk to be allocated, in bytes<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   */<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  Chunk getChunk(CompactingMemStore.IndexType chunkIndexType, int size) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    Chunk chunk = null;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    MemStoreChunkPool pool = null;<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // if the size is suitable for one of the pools<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    if (dataChunksPool != null &amp;&amp; size == dataChunksPool.getChunkSize()) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      pool = dataChunksPool;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    } else if (indexChunksPool != null &amp;&amp; size == indexChunksPool.getChunkSize()) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      pool = indexChunksPool;<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>    // if we have a pool<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    if (pool != null) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      //  the pool creates the chunk internally. The chunk#init() call happens here<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      chunk = pool.getChunk();<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      // the pool has run out of maxCount<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      if (chunk == null) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        if (LOG.isTraceEnabled()) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          LOG.trace("The chunk pool is full. Reached maxCount= " + pool.getMaxCount()<a name="line.212"></a>
-<span class="sourceLineNo">213</span>                  + ". Creating chunk onheap.");<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        }<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      }<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>    if (chunk == null) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      // the second parameter explains whether CellChunkMap index is requested,<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // in that case, put allocated on demand chunk mapping into chunkIdMap<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      chunk = createChunk(false, chunkIndexType, size);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>    // now we need to actually do the expensive memory allocation step in case of a new chunk,<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    // else only the offset is set to the beginning of the chunk to accept allocations<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    chunk.init();<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    return chunk;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>  }<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>  /**<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   * Creates and inits a chunk of a special size, bigger than a regular chunk size.<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   * Such a chunk will never come from pool and will always be on demand allocated.<a name="line.232"></a>
-<span class="sourceLineNo">233</span>   * @return the chunk that was initialized<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * @param jumboSize the special size to be used<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  Chunk getJumboChunk(int jumboSize) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    int allocSize = jumboSize + SIZEOF_CHUNK_HEADER;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    if (allocSize &lt;= dataChunksPool.getChunkSize()) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      LOG.warn("Jumbo chunk size " + jumboSize + " must be more than regular chunk size "<a name="line.239"></a>
-<span class="sourceLineNo">240</span>              + dataChunksPool.getChunkSize() + ". Converting to regular chunk.");<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      return getChunk(CompactingMemStore.IndexType.CHUNK_MAP);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    }<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    // the new chunk is going to hold the jumbo cell data and needs to be referenced by<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    // a strong map. Therefore the CCM index type<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    return getChunk(CompactingMemStore.IndexType.CHUNK_MAP, allocSize);<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>  /**<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   * Creates the chunk either onheap or offheap<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   * @param pool indicates if the chunks have to be created which will be used by the Pool<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * @param chunkIndexType whether the requested chunk is going to be used with CellChunkMap index<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   * @param size the size of the chunk to be allocated, in bytes<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   * @return the chunk<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  private Chunk createChunk(boolean pool, CompactingMemStore.IndexType chunkIndexType, int size) {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    Chunk chunk = null;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    int id = chunkID.getAndIncrement();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    assert id &gt; 0;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    // do not create offheap chunk on demand<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (pool &amp;&amp; this.offheap) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      chunk = new OffheapChunk(size, id, pool);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    } else {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      chunk = new OnheapChunk(size, id, pool);<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    if (pool || (chunkIndexType == CompactingMemStore.IndexType.CHUNK_MAP)) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      // put the pool chunk into the chunkIdMap so it is not GC-ed<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      this.chunkIdMap.put(chunk.getId(), chunk);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    }<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    return chunk;<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>  // Chunks from pool are created covered with strong references anyway<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  // TODO: change to CHUNK_MAP if it is generally defined<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  private Chunk createChunkForPool(CompactingMemStore.IndexType chunkIndexType, int chunkSize) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    if (chunkSize != dataChunksPool.getChunkSize() &amp;&amp;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>            chunkSize != indexChunksPool.getChunkSize()) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      return null;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    }<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    return createChunk(true, chunkIndexType, chunkSize);<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>  @VisibleForTesting<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    // Used to translate the ChunkID into a chunk ref<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  Chunk getChunk(int id) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    // can return null if chunk was never mapped<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    return chunkIdMap.get(id);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  }<a name="line.287"></a>
-<span class="sourceLineNo">288</span><a name="line.288"></a>
-<span class="sourceLineNo">289</span>  boolean isOffheap() {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    return this.offheap;<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>  private void removeChunks(Set&lt;Integer&gt; chunkIDs) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    this.chunkIdMap.keySet().removeAll(chunkIDs);<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>  Chunk removeChunk(int chunkId) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    return this.chunkIdMap.remove(chunkId);<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>  @VisibleForTesting<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    // the chunks in the chunkIdMap may already be released so we shouldn't relay<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    // on this counting for strong correctness. This method is used only in testing.<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  int numberOfMappedChunks() {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    return this.chunkIdMap.size();<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>  @VisibleForTesting<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  void clearChunkIds() {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    this.chunkIdMap.clear();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  }<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span>  /**<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * A pool of {@link Chunk} instances.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   *<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   * MemStoreChunkPool caches a number of retired chunks for reusing, it could<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   * decrease allocating bytes when writing, thereby optimizing the garbage<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * collection on JVM.<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private  class MemStoreChunkPool implements HeapMemoryTuneObserver {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    private final int chunkSize;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    private int maxCount;<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    // A queue of reclaimed chunks<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    private final BlockingQueue&lt;Chunk&gt; reclaimedChunks;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private final float poolSizePercentage;<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>    /** Statistics thread schedule pool */<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    private final ScheduledExecutorService scheduleThreadPool;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    /** Statistics thread */<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    private static final int statThreadPeriod = 60 * 5;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    private final AtomicLong chunkCount = new AtomicLong();<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    private final LongAdder reusedChunkCount = new LongAdder();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    private final String label;<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>    MemStoreChunkPool(String label, int chunkSize, int maxCount, int initialCount,<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        float poolSizePercentage) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      this.label = label;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      this.chunkSize = chunkSize;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      this.maxCount = maxCount;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.poolSizePercentage = poolSizePercentage;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.reclaimedChunks = new LinkedBlockingQueue&lt;&gt;();<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      for (int i = 0; i &lt; initialCount; i++) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        Chunk chunk = createChunk(true, CompactingMemStore.IndexType.ARRAY_MAP, chunkSize);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        chunk.init();<a name="line.345"></a>
-<span class="sourceLineNo">346</span>        reclaimedChunks.add(chunk);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      }<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      chunkCount.set(initialCount);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      final String n = Thread.currentThread().getName();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      scheduleThreadPool = Executors.newScheduledThreadPool(1, new ThreadFactoryBuilder()<a name="line.350"></a>
-<span class="sourceLineNo">351</span>              .setNameFormat(n + "-MemStoreChunkPool Statistics").setDaemon(true).build());<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      this.scheduleThreadPool.scheduleAtFixedRate(new StatisticsThread(), statThreadPeriod,<a name="line.352"></a>
-<span class="sourceLineNo">353</span>              statThreadPeriod, TimeUnit.SECONDS);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>    /**<a name="line.356"></a>
-<span class="sourceLineNo">357</span>     * Poll a chunk from the pool, reset it if not null, else create a new chunk to return if we have<a name="line.357"></a>
-<span class="sourceLineNo">358</span>     * not yet created max allowed chunks count. When we have already created max allowed chunks and<a name="line.358"></a>
-<span class="sourceLineNo">359</span>     * no free chunks as of now, return null. It is the responsibility of the caller to make a chunk<a name="line.359"></a>
-<span class="sourceLineNo">360</span>     * then.<a name="line.360"></a>
-<span class="sourceLineNo">361</span>     * Note: Chunks returned by this pool must be put back to the pool after its use.<a name="line.361"></a>
-<span class="sourceLineNo">362</span>     * @return a chunk<a name="line.362"></a>
-<span class="sourceLineNo">363</span>     * @see #putbackChunks(Chunk)<a name="line.363"></a>
-<span class="sourceLineNo">364</span>     */<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    Chunk getChunk() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      return getChunk(CompactingMemStore.IndexType.ARRAY_MAP);<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>    Chunk getChunk(CompactingMemStore.IndexType chunkIndexType) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      Chunk chunk = reclaimedChunks.poll();<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      if (chunk != null) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        chunk.reset();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        reusedChunkCount.increment();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      } else {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        // Make a chunk iff we have not yet created the maxCount chunks<a name="line.375"></a>
-<span class="sourceLineNo">376</span>        while (true) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          long created = this.chunkCount.get();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          if (created &lt; this.maxCount) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>            if (this.chunkCount.compareAndSet(created, created + 1)) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>              chunk = createChunkForPool(chunkIndexType, chunkSize);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>              break;<a name="line.381"></a>
-<span class="sourceLineNo">382</span>            }<a name="line.382"></a>
-<span class="sourceLineNo">383</span>          } else {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>            break;<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>
-<span class="sourceLineNo">387</span>      }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      return chunk;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>    int getChunkSize() {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      return chunkSize;<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>    /**<a name="line.395"></a>
-<span class="sourceLineNo">396</span>     * Add the chunks to the pool, when the pool achieves the max size, it will skip the remaining<a name="line.396"></a>
-<span class="sourceLineNo">397</span>     * chunks<a name="line.397"></a>
-<span class="sourceLineNo">398</span>     * @param c<a name="line.398"></a>
-<span class="sourceLineNo">399</span>     */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    private void putbackChunks(Chunk c) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      int toAdd = this.maxCount - reclaimedChunks.size();<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      if (c.isFromPool() &amp;&amp; c.size == chunkSize &amp;&amp; toAdd &gt; 0) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        reclaimedChunks.add(c);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      } else {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        // remove the chunk (that is not going to pool)<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        // though it is initially from the pool or not<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        ChunkCreator.this.removeChunk(c.getId());<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    }<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    private class StatisticsThread extends Thread {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      StatisticsThread() {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        super("MemStoreChunkPool.StatisticsThread");<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        setDaemon(true);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      }<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>      @Override<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      public void run() {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>        logStats();<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>      private void logStats() {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        if (!LOG.isDebugEnabled()) return;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        long created = chunkCount.get();<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        long reused = reusedChunkCount.sum();<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        long total = created + reused;<a name="line.426"></a>
-<span class="sourceLineNo">427</span>        LOG.debug("{} stats (chunk size={}): current pool size={}, created chunk count={}, " +<a name="line.427"></a>
-<span class="sourceLineNo">428</span>                "reused chunk count={}, reuseRatio={}", label, chunkSize, reclaimedChunks.size(),<a name="line.428"></a>
-<span class="sourceLineNo">429</span>            created, reused,<a name="line.429"></a>
-<span class="sourceLineNo">430</span>            (total == 0? "0": StringUtils.formatPercent((float)reused/(float)total,2)));<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    private int getMaxCount() {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      return this.maxCount;<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    @Override<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    public void onHeapMemoryTune(long newMemstoreSize, long newBlockCacheSize) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      // don't do any tuning in case of offheap memstore<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      if (isOffheap()) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        LOG.warn("{} not tuning the chunk pool as it is offheap", label);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>        return;<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      int newMaxCount =<a name="line.445"></a>
-<span class="sourceLineNo">446</span>              (int) (newMemstoreSize * poolSizePercentage / getChunkSize());<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      if (newMaxCount != this.maxCount) {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>        // We need an adjustment in the chunks numbers<a name="line.448"></a>
-<span class="sourceLineNo">449</span>        if (newMaxCount &gt; this.maxCount) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>          // Max chunks getting increased. Just change the variable. Later calls to getChunk() would<a name="line.450"></a>
-<span class="sourceLineNo">451</span>          // create and add them to Q<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          LOG.info("{} max count for chunks increased from {} to {}", this.label, this.maxCount,<a name="line.452"></a>
-<span class="sourceLineNo">453</span>              newMaxCount);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          this.maxCount = newMaxCount;<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        } else {<a name="line.455"></a>
-<span class="sourceLineNo">456</span>          // Max chunks getting decreased. We may need to clear off some of the pooled chunks now<a name="line.456"></a>
-<span class="sourceLineNo">457</span>          // itself. If the extra chunks are serving already, do not pool those when we get them back<a name="line.457"></a>
-<span class="sourceLineNo">458</span>          LOG.info("{} max count for chunks decreased from {} to {}", this.label, this.maxCount,<a name="line.458"></a>
-<span class="sourceLineNo">459</span>              newMaxCount);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          this.maxCount = newMaxCount;<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          if (this.reclaimedChunks.size() &gt; newMaxCount) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>            synchronized (this) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>              while (this.reclaimedChunks.size() &gt; newMaxCount) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>                this.reclaimedChunks.poll();<a name="line.464"></a>
-<span class="sourceLineNo">465</span>              }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>            }<a name="line.466"></a>
-<span class="sourceLineNo">467</span>          }<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        }<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>  }<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>  @VisibleForTesting<a name="line.473"></a>
-<span class="sourceLineNo">474</span>  static void clearDisableFlag() {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    chunkPoolDisabled = false;<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  private MemStoreChunkPool initializePool(String label, long globalMemStoreSize,<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      float poolSizePercentage, float initialCountPercentage, int chunkSize,<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      HeapMemoryManager heapMemoryManager) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    if (poolSizePercentage &lt;= 0) {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      LOG.info("{} poolSizePercentage is less than 0. So not using pool", label);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      return null;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    if (chunkPoolDisabled) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      return null;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    if (poolSizePercentage &gt; 1.0) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      throw new IllegalArgumentException(<a name="line.489"></a>
-<span class="sourceLineNo">490</span>              MemStoreLAB.CHUNK_POOL_MAXSIZE_KEY + " must be between 0.0 and 1.0");<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    int maxCount = (int) (globalMemStoreSize * poolSizePercentage / chunkSize);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    if (initialCountPercentage &gt; 1.0 || initialCountPercentage &lt; 0) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      throw new IllegalArgumentException(label + " " + MemStoreLAB.CHUNK_POOL_INITIALSIZE_KEY +<a name="line.494"></a>
-<span class="sourceLineNo">495</span>          " must be between 0.0 and 1.0");<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    }<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    int initialCount = (int) (initialCountPercentage * maxCount);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    LOG.info("Allocating {} MemStoreChunkPool with chunk size {}, max count {}, initial count {}",<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        label, StringUtils.byteDesc(chunkSize), maxCount, initialCount);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    MemStoreChunkPool memStoreChunkPool = new MemStoreChunkPool(label, chunkSize, maxCount,<a name="line.500"></a>
-<span class="sourceLineNo">501</span>            initialCount, poolSizePercentage);<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    if (heapMemoryManager != null &amp;&amp; memStoreChunkPool != null) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      // Register with Heap Memory manager<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      heapMemoryManager.registerTuneObserver(memStoreChunkPool);<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    return memStoreChunkPool;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>  }<a name="line.507"></a>
-<span class="sourceLineNo">508</span><a name="line.508"></a>
-<span class="sourceLineNo">509</span>  @VisibleForTesting<a name="line.509"></a>
-<span class="sourceLineNo">510</span>  int getMaxCount() {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    return getMaxCount(ChunkType.DATA_CHUNK);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>  }<a name="line.512"></a>
-<span class="sourceLineNo">513</span><a name="line.513"></a>
-<span class="sourceLineNo">514</span>  @VisibleForTesting<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  int getMaxCount(ChunkType chunkType) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    switch (chunkType) {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      case INDEX_CHUNK:<a name="line.517"></a>
-<span class="sourceLineNo">518</span>        if (indexChunksPool != null) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          return indexChunksPool.getMaxCount();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        }<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        break;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      case DATA_CHUNK:<a name="line.522"></a>
-<span class="sourceLineNo">523</span>        if (dataChunksPool != null) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          return dataChunksPool.getMaxCount();<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>        break;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      default:<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        throw new IllegalArgumentException(<a name="line.528"></a>
-<span class="sourceLineNo">529</span>                "chunkType must either be INDEX_CHUNK or DATA_CHUNK");<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    return 0;<a name="line.532"></a>
-<span class="sourceLineNo">533</span>  }<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>  @VisibleForTesting<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  int getPoolSize() {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    return getPoolSize(ChunkType.DATA_CHUNK);<a name="line.537"></a>
-<span class="sourceLineNo">538</span>  }<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>  @VisibleForTesting<a name="line.540"></a>
-<span class="sourceLineNo">541</span>  int getPoolSize(ChunkType chunkType) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    switch (chunkType) {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      case INDEX_CHUNK:<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        if (indexChunksPool != null) {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>          return indexChunksPool.reclaimedChunks.size();<a name="line.545"></a>
-<span class="sourceLineNo">546</span>        }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>        break;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      case DATA_CHUNK:<a name="line.548"></a>
-<span class="sourceLineNo">549</span>        if (dataChunksPool != null) {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>          return dataChunksPool.reclaimedChunks.size();<a name="line.550"></a>
-<span class="sourceLineNo">551</span>        }<a name="line.551"></a>
-<span class="sourceLineNo">552</span>        break;<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      default:<a name="line.553"></a>
-<span class="sourceLineNo">554</span>        throw new IllegalArgumentException(<a name="line.554"></a>
-<span class="sourceLineNo">555</span>                "chunkType must either be INDEX_CHUNK or DATA_CHUNK");<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    }<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    return 0;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>  @VisibleForTesting<a name="line.560"></a>
-<span class="sourceLineNo">561</span>  boolean isChunkInPool(int chunkId) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    Chunk c = getChunk(chunkId);<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    if (c==null) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      return false;<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    }<a name="line.565"></a>
-<span class="sourceLineNo">566</span><a name="line.566"></a>
-<span class="sourceLineNo">567</span>    // chunks that are from pool will return true chunk reference not null<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    if (dataChunksPool != null &amp;&amp; dataChunksPool.reclaimedChunks.contains(c)) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      return true;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    } else if (indexChunksPool != null &amp;&amp; indexChunksPool.reclaimedChunks.contains(c)) {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      return true;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    }<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    return false;<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  }<a name="line.574"></a>
-<span class="sourceLineNo">575</span><a name="line.575"></a>
-<span class="sourceLineNo">576</span>  /*<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   * Only used in testing<a name="line.577"></a>
-<span class="sourceLineNo">578</span>   */<a name="line.578"></a>
-<span class="sourceLineNo">579</span>  @VisibleForTesting<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  void clearChunksInPool() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    if (dataChunksPool != null) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      dataChunksPool.reclaimedChunks.clear();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    }<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    if (indexChunksPool != null) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      indexChunksPool.reclaimedChunks.clear();<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    }<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  }<a name="line.587"></a>
-<span class="sourceLineNo">588</span><a name="line.588"></a>
-<span class="sourceLineNo">589</span>  int getChunkSize() {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    return getChunkSize(ChunkType.DATA_CHUNK);<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  }<a name="line.591"></a>
-<span class="sourceLineNo">592</span><a name="line.592"></a>
-<span class="sourceLineNo">593</span>  int getChunkSize(ChunkType chunkType) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    switch (chunkType) {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      case INDEX_CHUNK:<a name="line.595"></a>
-<span class="sourceLineNo">596</span>        if (indexChunksPool != null) {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>          return indexChunksPool.getChunkSize();<a name="line.597"></a>
-<span class="sourceLineNo">598</span>        }<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      case DATA_CHUNK:<a name="line.599"></a>
-<span class="sourceLineNo">600</span>        if (dataChunksPool != null) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>          return dataChunksPool.getChunkSize();<a name="line.601"></a>
-<span class="sourceLineNo">602</span>        } else { // When pools are empty<a name="line.602"></a>
-<span class="sourceLineNo">603</span>          return chunkSize;<a name="line.603"></a>
-<span class="sourceLineNo">604</span>        }<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      default:<a name="line.605"></a>
-<span class="sourceLineNo">606</span>        throw new IllegalArgumentException(<a name="line.606"></a>
-<span class="sourceLineNo">607</span>                "chunkType must either be INDEX_CHUNK or DATA_CHUNK");<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>  }<a name="line.609"></a>
-<span class="sourceLineNo">610</span><a name="line.610"></a>
-<span class="sourceLineNo">611</span>  synchronized void putbackChunks(Set&lt;Integer&gt; chunks) {<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    // if there is no pool just try to clear the chunkIdMap in case there is something<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    if (dataChunksPool == null &amp;&amp; indexChunksPool == null) {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      this.removeChunks(chunks);<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      return;<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    }<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>    // if there is a pool, go over all chunk IDs that came back, the chunks may be from pool or not<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    for (int chunkID : chunks) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      // translate chunk ID to chunk, if chunk initially wasn't in pool<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      // this translation will (most likely) return null<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      Chunk chunk = ChunkCreator.this.getChunk(chunkID);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      if (chunk != null) {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>        if (chunk.isFromPool() &amp;&amp; chunk.isIndexChunk()) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>          indexChunksPool.putbackChunks(chunk);<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        } else if (chunk.isFromPool() &amp;&amp; chunk.size == dataChunksPool.getChunkSize()) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>          dataChunksPool.putbackChunks(chunk);<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        } else {<a name="line.628"></a>
-<span class="sourceLineNo">629</span>          // chunks which are not from one of the pools<a name="line.629"></a>
-<span class="sourceLineNo">630</span>          // should be released without going to the pools.<a name="line.630"></a>
-<span class="sourceLineNo">631</span>          // Removing them from chunkIdMap will cause their removal by the GC.<a name="line.631"></a>
-<span class="sourceLineNo">632</span>          this.removeChunk(chunkID);<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      }<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      // if chunk is null, it was never covered by the chunkIdMap (and so wasn't in pool also),<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      // so we have nothing to do on its release<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    }<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    return;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>  }<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span>}<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
+<span class="sourceLineNo">138</span>  @VisibleForTesting<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  public static ChunkCreator getInstance() {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    return instance;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  }<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>  /**<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * Creates and inits a chunk. The default implementation for a specific chunk size.<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * @return the chunk that was initialized<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   */<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  Chunk getChunk(ChunkType chunkType) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    return getChunk(CompactingMemStore.IndexType.ARRAY_MAP, chunkType);<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  }<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>  /**<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * Creates and inits a chunk. The default implementation.<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * @return the chunk that was initialized<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  Chunk getChunk() {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    return getChunk(CompactingMemStore.IndexType.ARRAY_MAP, ChunkType.DATA_CHUNK);<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>  /**<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * Creates and inits a chunk. The default implementation for a specific index type.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * @return the chunk that was initialized<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   */<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  Chunk getChunk(CompactingMemStore.IndexType chunkIndexType) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    return getChunk(chunkIndexType, ChunkType.DATA_CHUNK);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>  /**<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * Creates and inits a chunk with specific index type and type.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * @return the chunk that was initialized<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   */<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  Chunk getChunk(CompactingMemStore.IndexType chunkIndexType, ChunkType chunkType) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    switch (chunkType) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      case INDEX_CHUNK:<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        if (indexChunksPool != null) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>          return getChunk(chunkIndexType, indexChunksPool.getChunkSize());<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        }<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      case DATA_CHUNK:<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        if (dataChunksPool == null) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          return getChunk(chunkIndexType, chunkSize);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        } else {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>          return getChunk(chunkIndexType, dataChunksPool.getChunkSize());<a name="line.181"></a>
+<span class="sourceLineNo">182</span>        }<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      default:<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        throw new IllegalArgumentException(<a name="line.184"></a>
+<span class="sourceLineNo">185</span>                "chunkType must either be INDEX_CHUNK or DATA_CHUNK");<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>
+<span class="sourceLineNo">189</span>  /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * Creates and inits a chunk.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * @return the chunk that was initialized<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   * @param chunkIndexType whether the requested chunk is going to be used with CellChunkMap index<a name="line.192"></a>
+<span class="sourceLineNo">193</span>   * @param size the size of the chunk to be allocated, in bytes<a name="line.193"></a>
+<span class="sourceLineNo">194</span>   */<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  Chunk getChunk(CompactingMemStore.IndexType chunkIndexType, int size) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    Chunk chunk = null;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    MemStoreChunkPool pool = null;<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>    // if the size is suitable for one of the pools<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    if (dataChunksPool != null &amp;&amp; size == dataChunksPool.getChunkSize()) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      pool = dataChunksPool;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    } else if (indexChunksPool != null &amp;&amp; size == indexChunksPool.getChunkSize()) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      pool = indexChunksPool;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>    // if we have a pool<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    if (pool != null) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      //  the pool creates the chunk internally. The chunk#init() call happens here<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      chunk = pool.getChunk();<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      // the pool has run out of maxCount<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      if (chunk == null) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        if (LOG.isTraceEnabled()) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>          LOG.trace("The chunk pool is full. Reached maxCount= " + pool.getMaxCount()<a name="line.213"></a>
+<span class="sourceLineNo">214</span>                  + ". Creating chunk onheap.");<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        }<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><a name="line.218"></a>
+<span class="sourceLineNo">219</span>    if (chunk == null) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      // the second parameter explains whether CellChunkMap index is requested,<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      // in that case, put allocated on demand chunk mapping into chunkIdMap<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      chunk = createChunk(false, chunkIndexType, size);<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>    // now we need to actually do the expensive memory allocation step in case of a new chunk,<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    // else only the offset is set to the beginning of the chunk to accept allocations<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    chunk.init();<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    return chunk;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>  /**<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * Creates and inits a chunk of a special size, bigger than a regular chunk size.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * Such a chunk will never come from pool and will always be on demand allocated.<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   * @return the chunk that was initialized<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   * @param jumboSize the special size to be used<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  Chunk getJumboChunk(int jumboSize) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    int allocSize = jumboSize + SIZEOF_CHUNK_HEADER;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    if (allocSize &lt;= dataChunksPool.getChunkSize()) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      LOG.warn("Jumbo chunk size " + jumboSize + " must be more than regular chunk size "<a name="line.240"></a>
+<span class="sourceLineNo">241</span>              + dataChunksPool.getChunkSize() + ". Converting to regular chunk.");<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      return getChunk(CompactingMemStore.IndexType.CHUNK_MAP);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    }<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    // the new chunk is going to hold the jumbo cell data and needs to be referenced by<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    // a strong map. Therefore the CCM index type<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    return getChunk(CompactingMemStore.IndexType.CHUNK_MAP, allocSize);<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>  /**<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * Creates the chunk either onheap or offheap<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   * @param pool indicates if the chunks have to be created which will be used by the Pool<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   * @param chunkIndexType whether the requested chunk is going to be used with CellChunkMap index<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   * @param size the size of the chunk to be allocated, in bytes<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * @return the chunk<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   */<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  private Chunk createChunk(boolean pool, CompactingMemStore.IndexType chunkIndexType, int size) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    Chunk chunk = null;<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    int id = chunkID.getAndIncrement();<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    assert id &gt; 0;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    // do not create offheap chunk on demand<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    if (pool &amp;&amp; this.offheap) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      chunk = new OffheapChunk(size, id, pool);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    } else {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      chunk = new OnheapChunk(size, id, pool);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    if (pool || (chunkIndexType == CompactingMemStore.IndexType.CHUNK_MAP)) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      // put the pool chunk into the chunkIdMap so it is not GC-ed<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      this.chunkIdMap.put(chunk.getId(), chunk);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    }<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    return chunk;<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>  // Chunks from pool are created covered with strong references anyway<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  // TODO: change to CHUNK_MAP if it is generally defined<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  private Chunk createChunkForPool(CompactingMemStore.IndexType chunkIndexType, int chunkSize) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    if (chunkSize != dataChunksPool.getChunkSize() &amp;&amp;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>            chunkSize != indexChunksPool.getChunkSize()) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      return null;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    return createChunk(true, chunkIndexType, chunkSize);<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>  @VisibleForTesting<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    // Used to translate the ChunkID into a chunk ref<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  Chunk getChunk(int id) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    // can return null if chunk was never mapped<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    return chunkIdMap.get(id);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>  }<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>  boolean isOffheap() {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    return this.offheap;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>  }<a name="line.292"></a>
+<span class="sourceLineNo">293</span><a name="line.293"></a>
+<span class="sourceLineNo">294</span>  private void removeChunks(Set&lt;Integer&gt; chunkIDs) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    this.chunkIdMap.keySet().removeAll(chunkIDs);<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>  Chunk removeChunk(int chunkId) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    return this.chunkIdMap.remove(chunkId);<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>  @VisibleForTesting<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    // the chunks in the chunkIdMap may already be released so we shouldn't relay<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    // on this counting for strong correctness. This method is used only in testing.<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  int numberOfMappedChunks() {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    return this.chunkIdMap.size();<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  }<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span>  @VisibleForTesting<a name="line.309"></a>
+<span class="sourceLineNo">310</span>  void clearChunkIds() {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    this.chunkIdMap.clear();<a name="line.311"></a>
+<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * A pool of {@link Chunk} instances.<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   *<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * MemStoreChunkPool caches a number of retired chunks for reusing, it could<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * decrease allocating bytes when writing, thereby optimizing the garbage<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   * collection on JVM.<a name="line.319"></a>
+<span class="sourceLineNo">320</span>   */<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  private  class MemStoreChunkPool implements HeapMemoryTuneObserver {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    private final int chunkSize;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    private int maxCount;<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    // A queue of reclaimed chunks<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    private final BlockingQueue&lt;Chunk&gt; reclaimedChunks;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    private final float poolSizePercentage;<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>    /** Statistics thread schedule pool */<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    private final ScheduledExecutorService scheduleThreadPool;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    /** Statistics thread */<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    private static final int statThreadPeriod = 60 * 5;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    private final AtomicLong chunkCount = new AtomicLong();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    private final LongAdder reusedChunkCount = new LongAdder();<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    private final String label;<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>    MemStoreChunkPool(String label, int chunkSize, int maxCount, int initialCount,<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        float poolSizePercentage) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      this.label = label;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      this.chunkSize = chunkSize;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      this.maxCount = maxCount;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      this.poolSizePercentage = poolSizePercentage;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.reclaimedChunks = new LinkedBlockingQueue&lt;&gt;();<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      for (int i = 0; i &lt; initialCount; i++) {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        Chunk chunk = createChunk(true, CompactingMemStore.IndexType.ARRAY_MAP, chunkSize);<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        chunk.init();<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        reclaimedChunks.add(chunk);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      }<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      chunkCount.set(initialCount);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      final String n = Thread.currentThread().getName();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      scheduleThreadPool = Executors.newScheduledThreadPool(1, new ThreadFactoryBuilder()<a name="line.351"></a>
+<span class="sourceLineNo">352</span>              .setNameFormat(n + "-MemStoreChunkPool Statistics").setDaemon(true).build());<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      this.scheduleThreadPool.scheduleAtFixedRate(new StatisticsThread(), statThreadPeriod,<a name="line.353"></a>
+<span class="sourceLineNo">354</span>              statThreadPeriod, TimeUnit.SECONDS);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    }<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span>     * Poll a chunk from the pool, reset it if not null, else create a new chunk to return if we have<a name="line.358"></a>
+<span class="sourceLineNo">359</span>     * not yet created max allowed chunks count. When we have already created max allowed chunks and<a name="line.359"></a>
+<span class="sourceLineNo">360</span>     * no free chunks as of now, return null. It is the responsibility of the caller to make a chunk<a name="line.360"></a>
+<span class="sourceLineNo">361</span>     * then.<a name="line.361"></a>
+<span class="sourceLineNo">362</span>     * Note: Chunks returned by this pool must be put back to the pool after its use.<a name="line.362"></a>
+<span class="sourceLineNo">363</span>     * @return a chunk<a name="line.363"></a>
+<span class="sourceLineNo">364</span>     * @see #putbackChunks(Chunk)<a name="line.364"></a>
+<span class="sourceLineNo">365</span>     */<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    Chunk getChunk() {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      return getChunk(CompactingMemStore.IndexType.ARRAY_MAP);<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>    Chunk getChunk(CompactingMemStore.IndexType chunkIndexType) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      Chunk chunk = reclaimedChunks.poll();<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      if (chunk != null) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        chunk.reset();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        reusedChunkCount.increment();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      } else {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        // Make a chunk iff we have not yet created the maxCount chunks<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        while (true) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>          long created = this.chunkCount.get();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>          if (created &lt; this.maxCount) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>            if (this.chunkCount.compareAndSet(created, created + 1)) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>              chunk = createChunkForPool(chunkIndexType, chunkSize);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>              break;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>            }<a name="line.383"></a>
+<span class="sourceLineNo">384</span>          } else {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>            break;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>          }<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>      return chunk;<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>    int getChunkSize() {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      return chunkSize;<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>    /**<a name="line.396"></a>
+<span class="sourceLineNo">397</span>     * Add the chunks to the pool, when the pool achieves the max size, it will skip the remaining<a name="line.397"></a>
+<span class="sourceLineNo">398</span>     * chunks<a name="line.398"></a>
+<span class="sourceLineNo">399</span>     * @param c<a name="line.399"></a>
+<span class="sourceLineNo">400</span>     */<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    private void putbackChunks(Chunk c) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      int toAdd = this.maxCount - reclaimedChunks.size();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      if (c.isFromPool() &amp;&amp; c.size == chunkSize &amp;&amp; toAdd &gt; 0) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        reclaimedChunks.add(c);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      } else {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        // remove the chunk (that is not going to pool)<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        // though it is initially from the pool or not<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        ChunkCreator.this.removeChunk(c.getId());<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      }<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    }<a name="line.410"></a>
+<span class="sourceLineNo">411</span><a name="line.411"></a>
+<span class="sourceLineNo">412</span>    private class StatisticsThread extends Thread {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      StatisticsThread() {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        super("MemStoreChunkPool.StatisticsThread");<a name="line.414"></a>
+<span class="sourceLineNo">415</span>        setDaemon(true);<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      }<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span>      @Override<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      public void run() {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        logStats();<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      }<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>      private void logStats() {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        if (!LOG.isDebugEnabled()) return;<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        long created = chunkCount.get();<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        long reused = reusedChunkCount.sum();<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        long total = created + reused;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        LOG.debug("{} stats (chunk size={}): current pool size={}, created chunk count={}, " +<a name="line.428"></a>
+<span class="sourceLineNo">429</span>                "reused chunk count={}, reuseRatio={}", label, chunkSize, reclaimedChunks.size(),<a name="line.429"></a>
+<span class="sourceLineNo">430</span>            created, reused,<a name="line.430"></a>
+<span class="sourceLineNo">431</span>            (total == 0? "0": StringUtils.formatPercent((float)reused/(float)total,2)));<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>    private int getMaxCount() {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      return this.maxCount;<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    }<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>    @Override<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    public void onHeapMemoryTune(long newMemstoreSize, long newBlockCacheSize) {<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      // don't do any tuning in case of offheap memstore<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      if (isOffheap()) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        LOG.warn("{} not tuning the chunk pool as it is offheap", label);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>        return;<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      }<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      int newMaxCount =<a name="line.446"></a>
+<span class="sourceLineNo">447</span>              (int) (newMemstoreSize * poolSizePercentage / getChunkSize());<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      if (newMaxCount != this.maxCount) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>        // We need an adjustment in the chunks numbers<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        if (newMaxCount &gt; this.maxCount) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>          // Max chunks getting increased. Just change the variable. Later calls to getChunk() would<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          // create and add them to Q<a name="line.452"></a>
+<span class="sourceLineNo">453</span>          LOG.info("{} max count for chunks increased from {} to {}", this.label, this.maxCount,<a name="line.453"></a>
+<span class="sourceLineNo">454</span>              newMaxCount);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          this.maxCount = newMaxCount;<a name="line.455"></a>
+<span class="sourceLineNo">456</span>        } else {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          // Max chunks getting decreased. We may need to clear off some of the pooled chunks now<a name="line.457"></a>
+<span class="sourceLineNo">458</span>          // itself. If the extra chunks are serving already, do not pool those when we get them back<a name="line.458"></a>
+<span class="sourceLineNo">459</span>          LOG.info("{} max count for chunks decreased from {} to {}", this.label, this.maxCount,<a name="line.459"></a>
+<span class="sourceLineNo">460</span>              newMaxCount);<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          this.maxCount = newMaxCount;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>          if (this.reclaimedChunks.size() &gt; newMaxCount) {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>            synchronized (this) {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>              while (this.reclaimedChunks.size() &gt; newMaxCount) {<a name="line.464"></a>
+<span class="sourceLineNo">465</span>                this.reclaimedChunks.poll();<a name="line.465"></a>
+<span class="sourceLineNo">466</span>              }<a name="line.466"></a>
+<span class="sourceLineNo">467</span>            }<a name="line.467"></a>
+<span class="sourceLineNo">468</span>          }<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>    }<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  }<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span>  @VisibleForTesting<a name="line.474"></a>
+<span class="sourceLineNo">475</span>  static void clearDisableFlag() {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    chunkPoolDisabled = false;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  private MemStoreChunkPool initializePool(String label, long globalMemStoreSize,<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      float poolSizePercentage, float initialCountPercentage, int chunkSize,<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      HeapMemoryManager heapMemoryManager) {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    if (poolSizePercentage &lt;= 0) {<a name="line.482"></a>
+<span class="sourceLineNo">483</span>      LOG.info("{} poolSizePercentage is less than 0. So not using pool", label);<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      return null;<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    }<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    if (chunkPoolDisabled) {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      return null;<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    }<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    if (poolSizePercentage &gt; 1.0) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      throw new IllegalArgumentException(<a name="line.490"></a>
+<span class="sourceLineNo">491</span>              MemStoreLAB.CHUNK_POOL_MAXSIZE_KEY + " must be between 0.0 and 1.0");<a name="line.491"></a>
+<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    int maxCount = (int) (globalMemStoreSize * poolSizePercentage / chunkSize);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    if (initialCountPercentage &gt; 1.0 || initialCountPercentage &lt; 0) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      throw new IllegalArgumentException(label + " " + MemStoreLAB.CHUNK_POOL_INITIALSIZE_KEY +<a name="line.495"></a>
+<span class="sourceLineNo">496</span>          " must be between 0.0 and 1.0");<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    int initialCount = (int) (initialCountPercentage * maxCount);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    LOG.info("Allocating {} MemStoreChunkPool with chunk size {}, max count {}, initial count {}",<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        label, StringUtils.byteDesc(chunkSize), maxCount, initialCount);<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    MemStoreChunkPool memStoreChunkPool = new MemStoreChunkPool(label, chunkSize, maxCount,<a name="line.501"></a>
+<span class="sourceLineNo">502</span>            initialCount, poolSizePercentage);<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    if (heapMemoryManager != null &amp;&amp; memStoreChunkPool != null) {<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      // Register with Heap Memory manager<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      heapMemoryManager.registerTuneObserver(memStoreChunkPool);<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    return memStoreChunkPool;<a name="line.507"></a>
+<span class="sourceLineNo">508</span>  }<a name="line.508"></a>
+<span class="sourceLineNo">509</span><a name="line.509"></a>
+<span class="sourceLineNo">510</span>  @VisibleForTesting<a name="line.510"></a>
+<span class="sourceLineNo">511</span>  int getMaxCount() {<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    return getMaxCount(ChunkType.DATA_CHUNK);<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>  @VisibleForTesting<a name="line.515"></a>
+<span class="sourceLineNo">516</span>  int getMaxCount(ChunkType chunkType) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    switch (chunkType) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      case INDEX_CHUNK:<a name="line.518"></a>
+<span class="sourceLineNo">519</span>        if (indexChunksPool != null) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>          return indexChunksPool.getMaxCount();<a name="line.520"></a>
+<span class="sourceLineNo">521</span>        }<a name="line.521"></a>
+<span class="sourceLineNo">522</span>        break;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      case DATA_CHUNK:<a name="line.523"></a>
+<span class="sourceLineNo">524</span>        if (dataChunksPool != null) {<a name="line.524"></a>
+<span class="sourceLineNo">525</span>          return dataChunksPool.getMaxCount();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>        }<a name="line.526"></a>
+<span class="sourceLineNo">527</span>        break;<a name="line.527"></a>
+<span class="sourceLineNo">528</span>      default:<a name="line.528"></a>
+<span class="sourceLineNo">529</span>        throw new IllegalArgumentException(<a name="line.529"></a>
+<span class="sourceLineNo">530</span>                "chunkType must either be INDEX_CHUNK or DATA_CHUNK");<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    return 0;<a name="line.533"></a>
+<span class="sourceLineNo">534</span>  }<a name="line.534"></a>
+<span class="sourceLineNo">535</span><a name="line.535"></a>
+<span class="sourceLineNo">536</span>  @VisibleForTesting<a name="line.536"></a>
+<span class="sourceLineNo">537</span>  int getPoolSize() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    return getPoolSize(ChunkType.DATA_CHUNK);<a name="line.538"></a>
+<span class="sourceLineNo">539</span>  }<a name="line.539"></a>
+<span class="sourceLineNo">540</span><a name="line.540"></a>
+<span class="sourceLineNo">541</span>  @VisibleForTesting<a name="line.541"></a>
+<span class="sourceLineNo">542</span>  int getPoolSize(ChunkType chunkType) {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    switch (chunkType) {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      case INDEX_CHUNK:<a name="line.544"></a>
+<span class="sourceLineNo">545</span>        if (indexChunksPool != null) {<a name="line.545"></a>
+<span class="sourceLineNo">546</span>          return indexChunksPool.reclaimedChunks.size();<a name="line.546"></a>
+<span class="sourceLineNo">547</span>        }<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        break;<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      case DATA_CHUNK:<a name="line.549"></a>
+<span class="sourceLineNo">550</span>        if (dataChunksPool != null) {<a name="line.550"></a>
+<span class="sourceLineNo">551</span>          return dataChunksPool.reclaimedChunks.size();<a name="line.551"></a>
+<span class="sourceLineNo">552</span>        }<a name="line.552"></a>
+<span class="sourceLineNo">553</span>        break;<a name="line.553"></a>
+<span class="sourceLineNo">554</span>      default:<a name

<TRUNCATED>

[18/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/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 6591d6c..b31c78e 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
@@ -923,3042 +923,3045 @@
 <span class="sourceLineNo">915</span><a name="line.915"></a>
 <span class="sourceLineNo">916</span>    this.masterActiveTime = System.currentTimeMillis();<a name="line.916"></a>
 <span class="sourceLineNo">917</span>    // TODO: Do this using Dependency Injection, using PicoContainer, Guice or Spring.<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    // Initialize the chunkCreator<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    initializeMemStoreChunkCreator();<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.920"></a>
-<span class="sourceLineNo">921</span>    this.walManager = new MasterWalManager(this);<a name="line.921"></a>
-<span class="sourceLineNo">922</span><a name="line.922"></a>
-<span class="sourceLineNo">923</span>    // enable table descriptors cache<a name="line.923"></a>
-<span class="sourceLineNo">924</span>    this.tableDescriptors.setCacheOn();<a name="line.924"></a>
+<span class="sourceLineNo">918</span><a name="line.918"></a>
+<span class="sourceLineNo">919</span>    // Only initialize the MemStoreLAB when master carry table<a name="line.919"></a>
+<span class="sourceLineNo">920</span>    if (LoadBalancer.isTablesOnMaster(conf)) {<a name="line.920"></a>
+<span class="sourceLineNo">921</span>      initializeMemStoreChunkCreator();<a name="line.921"></a>
+<span class="sourceLineNo">922</span>    }<a name="line.922"></a>
+<span class="sourceLineNo">923</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.923"></a>
+<span class="sourceLineNo">924</span>    this.walManager = new MasterWalManager(this);<a name="line.924"></a>
 <span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>    // warm-up HTDs cache on master initialization<a name="line.926"></a>
-<span class="sourceLineNo">927</span>    if (preLoadTableDescriptors) {<a name="line.927"></a>
-<span class="sourceLineNo">928</span>      status.setStatus("Pre-loading table descriptors");<a name="line.928"></a>
-<span class="sourceLineNo">929</span>      this.tableDescriptors.getAll();<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>    // Publish cluster ID; set it in Master too. The superclass RegionServer does this later but<a name="line.932"></a>
-<span class="sourceLineNo">933</span>    // only after it has checked in with the Master. At least a few tests ask Master for clusterId<a name="line.933"></a>
-<span class="sourceLineNo">934</span>    // before it has called its run method and before RegionServer has done the reportForDuty.<a name="line.934"></a>
-<span class="sourceLineNo">935</span>    ClusterId clusterId = fileSystemManager.getClusterId();<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    status.setStatus("Publishing Cluster ID " + clusterId + " in ZooKeeper");<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.937"></a>
-<span class="sourceLineNo">938</span>    this.clusterId = clusterId.toString();<a name="line.938"></a>
-<span class="sourceLineNo">939</span><a name="line.939"></a>
-<span class="sourceLineNo">940</span>    // Precaution. Put in place the old hbck1 lock file to fence out old hbase1s running their<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    // hbck1s against an hbase2 cluster; it could do damage. To skip this behavior, set<a name="line.941"></a>
-<span class="sourceLineNo">942</span>    // hbase.write.hbck1.lock.file to false.<a name="line.942"></a>
-<span class="sourceLineNo">943</span>    if (this.conf.getBoolean("hbase.write.hbck1.lock.file", true)) {<a name="line.943"></a>
-<span class="sourceLineNo">944</span>      HBaseFsck.checkAndMarkRunningHbck(this.conf,<a name="line.944"></a>
-<span class="sourceLineNo">945</span>          HBaseFsck.createLockRetryCounterFactory(this.conf).create());<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    }<a name="line.946"></a>
-<span class="sourceLineNo">947</span><a name="line.947"></a>
-<span class="sourceLineNo">948</span>    status.setStatus("Initialize ServerManager and schedule SCP for crash servers");<a name="line.948"></a>
-<span class="sourceLineNo">949</span>    this.serverManager = createServerManager(this);<a name="line.949"></a>
-<span class="sourceLineNo">950</span>    createProcedureExecutor();<a name="line.950"></a>
-<span class="sourceLineNo">951</span>    @SuppressWarnings("rawtypes")<a name="line.951"></a>
-<span class="sourceLineNo">952</span>    Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType =<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      procedureExecutor.getActiveProceduresNoCopy().stream()<a name="line.953"></a>
-<span class="sourceLineNo">954</span>        .collect(Collectors.groupingBy(p -&gt; p.getClass()));<a name="line.954"></a>
-<span class="sourceLineNo">955</span><a name="line.955"></a>
-<span class="sourceLineNo">956</span>    checkUnsupportedProcedure(procsByType);<a name="line.956"></a>
-<span class="sourceLineNo">957</span><a name="line.957"></a>
-<span class="sourceLineNo">958</span>    // Create Assignment Manager<a name="line.958"></a>
-<span class="sourceLineNo">959</span>    this.assignmentManager = createAssignmentManager(this);<a name="line.959"></a>
-<span class="sourceLineNo">960</span>    this.assignmentManager.start();<a name="line.960"></a>
-<span class="sourceLineNo">961</span>    // TODO: TRSP can perform as the sub procedure for other procedures, so even if it is marked as<a name="line.961"></a>
-<span class="sourceLineNo">962</span>    // completed, it could still be in the procedure list. This is a bit strange but is another<a name="line.962"></a>
-<span class="sourceLineNo">963</span>    // story, need to verify the implementation for ProcedureExecutor and ProcedureStore.<a name="line.963"></a>
-<span class="sourceLineNo">964</span>    List&lt;TransitRegionStateProcedure&gt; ritList =<a name="line.964"></a>
-<span class="sourceLineNo">965</span>      procsByType.getOrDefault(TransitRegionStateProcedure.class, Collections.emptyList()).stream()<a name="line.965"></a>
-<span class="sourceLineNo">966</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p)<a name="line.966"></a>
-<span class="sourceLineNo">967</span>        .collect(Collectors.toList());<a name="line.967"></a>
-<span class="sourceLineNo">968</span>    this.assignmentManager.setupRIT(ritList);<a name="line.968"></a>
-<span class="sourceLineNo">969</span><a name="line.969"></a>
-<span class="sourceLineNo">970</span>    // Start RegionServerTracker with listing of servers found with exiting SCPs -- these should<a name="line.970"></a>
-<span class="sourceLineNo">971</span>    // be registered in the deadServers set -- and with the list of servernames out on the<a name="line.971"></a>
-<span class="sourceLineNo">972</span>    // filesystem that COULD BE 'alive' (we'll schedule SCPs for each and let SCP figure it out).<a name="line.972"></a>
-<span class="sourceLineNo">973</span>    // We also pass dirs that are already 'splitting'... so we can do some checks down in tracker.<a name="line.973"></a>
-<span class="sourceLineNo">974</span>    // TODO: Generate the splitting and live Set in one pass instead of two as we currently do.<a name="line.974"></a>
-<span class="sourceLineNo">975</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.975"></a>
-<span class="sourceLineNo">976</span>    this.regionServerTracker.start(<a name="line.976"></a>
-<span class="sourceLineNo">977</span>      procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.977"></a>
-<span class="sourceLineNo">978</span>        .map(p -&gt; (ServerCrashProcedure) p).map(p -&gt; p.getServerName()).collect(Collectors.toSet()),<a name="line.978"></a>
-<span class="sourceLineNo">979</span>      walManager.getLiveServersFromWALDir(), walManager.getSplittingServersFromWALDir());<a name="line.979"></a>
-<span class="sourceLineNo">980</span>    // This manager will be started AFTER hbase:meta is confirmed on line.<a name="line.980"></a>
-<span class="sourceLineNo">981</span>    // hbase.mirror.table.state.to.zookeeper is so hbase1 clients can connect. They read table<a name="line.981"></a>
-<span class="sourceLineNo">982</span>    // state from zookeeper while hbase2 reads it from hbase:meta. Disable if no hbase1 clients.<a name="line.982"></a>
-<span class="sourceLineNo">983</span>    this.tableStateManager =<a name="line.983"></a>
-<span class="sourceLineNo">984</span>      this.conf.getBoolean(MirroringTableStateManager.MIRROR_TABLE_STATE_TO_ZK_KEY, true)<a name="line.984"></a>
-<span class="sourceLineNo">985</span>        ?<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        new MirroringTableStateManager(this):<a name="line.986"></a>
-<span class="sourceLineNo">987</span>        new TableStateManager(this);<a name="line.987"></a>
-<span class="sourceLineNo">988</span><a name="line.988"></a>
-<span class="sourceLineNo">989</span>    status.setStatus("Initializing ZK system trackers");<a name="line.989"></a>
-<span class="sourceLineNo">990</span>    initializeZKBasedSystemTrackers();<a name="line.990"></a>
-<span class="sourceLineNo">991</span>    status.setStatus("Loading last flushed sequence id of regions");<a name="line.991"></a>
-<span class="sourceLineNo">992</span>    try {<a name="line.992"></a>
-<span class="sourceLineNo">993</span>      this.serverManager.loadLastFlushedSequenceIds();<a name="line.993"></a>
-<span class="sourceLineNo">994</span>    } catch (IOException e) {<a name="line.994"></a>
-<span class="sourceLineNo">995</span>      LOG.debug("Failed to load last flushed sequence id of regions"<a name="line.995"></a>
-<span class="sourceLineNo">996</span>          + " from file system", e);<a name="line.996"></a>
-<span class="sourceLineNo">997</span>    }<a name="line.997"></a>
-<span class="sourceLineNo">998</span>    // Set ourselves as active Master now our claim has succeeded up in zk.<a name="line.998"></a>
-<span class="sourceLineNo">999</span>    this.activeMaster = true;<a name="line.999"></a>
-<span class="sourceLineNo">1000</span><a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>    // This is for backwards compatibility<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>    // See HBASE-11393<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>    ReplicationPeerConfigUpgrader tableCFsUpdater =<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>        new ReplicationPeerConfigUpgrader(zooKeeper, conf);<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>    tableCFsUpdater.copyTableCFs();<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span><a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>    if (!maintenanceMode) {<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>      // Add the Observer to delete quotas on table deletion before starting all CPs by<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>      // default with quota support, avoiding if user specifically asks to not load this Observer.<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>      if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>        updateConfigurationForQuotasObserver(conf);<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>      }<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      // initialize master side coprocessors before we start handling requests<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>      status.setStatus("Initializing master coprocessors");<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>      this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>    }<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span><a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>    // Checking if meta needs initializing.<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    status.setStatus("Initializing meta table if this is a new deploy");<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>    InitMetaProcedure initMetaProc = null;<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>    // Print out state of hbase:meta on startup; helps debugging.<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>    RegionState rs = this.assignmentManager.getRegionStates().<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>        getRegionState(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>    LOG.info("hbase:meta {}", rs);<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>    if (rs.isOffline()) {<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>      Optional&lt;InitMetaProcedure&gt; optProc = procedureExecutor.getProcedures().stream()<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>        .filter(p -&gt; p instanceof InitMetaProcedure).map(o -&gt; (InitMetaProcedure) o).findAny();<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>      initMetaProc = optProc.orElseGet(() -&gt; {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>        // schedule an init meta procedure if meta has not been deployed yet<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>        InitMetaProcedure temp = new InitMetaProcedure();<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>        procedureExecutor.submitProcedure(temp);<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        return temp;<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      });<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>    }<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>    if (this.balancer instanceof FavoredNodesPromoter) {<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>      favoredNodesManager = new FavoredNodesManager(this);<a name="line.1037"></a>
+<span class="sourceLineNo">926</span>    // enable table descriptors cache<a name="line.926"></a>
+<span class="sourceLineNo">927</span>    this.tableDescriptors.setCacheOn();<a name="line.927"></a>
+<span class="sourceLineNo">928</span><a name="line.928"></a>
+<span class="sourceLineNo">929</span>    // warm-up HTDs cache on master initialization<a name="line.929"></a>
+<span class="sourceLineNo">930</span>    if (preLoadTableDescriptors) {<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      status.setStatus("Pre-loading table descriptors");<a name="line.931"></a>
+<span class="sourceLineNo">932</span>      this.tableDescriptors.getAll();<a name="line.932"></a>
+<span class="sourceLineNo">933</span>    }<a name="line.933"></a>
+<span class="sourceLineNo">934</span><a name="line.934"></a>
+<span class="sourceLineNo">935</span>    // Publish cluster ID; set it in Master too. The superclass RegionServer does this later but<a name="line.935"></a>
+<span class="sourceLineNo">936</span>    // only after it has checked in with the Master. At least a few tests ask Master for clusterId<a name="line.936"></a>
+<span class="sourceLineNo">937</span>    // before it has called its run method and before RegionServer has done the reportForDuty.<a name="line.937"></a>
+<span class="sourceLineNo">938</span>    ClusterId clusterId = fileSystemManager.getClusterId();<a name="line.938"></a>
+<span class="sourceLineNo">939</span>    status.setStatus("Publishing Cluster ID " + clusterId + " in ZooKeeper");<a name="line.939"></a>
+<span class="sourceLineNo">940</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.940"></a>
+<span class="sourceLineNo">941</span>    this.clusterId = clusterId.toString();<a name="line.941"></a>
+<span class="sourceLineNo">942</span><a name="line.942"></a>
+<span class="sourceLineNo">943</span>    // Precaution. Put in place the old hbck1 lock file to fence out old hbase1s running their<a name="line.943"></a>
+<span class="sourceLineNo">944</span>    // hbck1s against an hbase2 cluster; it could do damage. To skip this behavior, set<a name="line.944"></a>
+<span class="sourceLineNo">945</span>    // hbase.write.hbck1.lock.file to false.<a name="line.945"></a>
+<span class="sourceLineNo">946</span>    if (this.conf.getBoolean("hbase.write.hbck1.lock.file", true)) {<a name="line.946"></a>
+<span class="sourceLineNo">947</span>      HBaseFsck.checkAndMarkRunningHbck(this.conf,<a name="line.947"></a>
+<span class="sourceLineNo">948</span>          HBaseFsck.createLockRetryCounterFactory(this.conf).create());<a name="line.948"></a>
+<span class="sourceLineNo">949</span>    }<a name="line.949"></a>
+<span class="sourceLineNo">950</span><a name="line.950"></a>
+<span class="sourceLineNo">951</span>    status.setStatus("Initialize ServerManager and schedule SCP for crash servers");<a name="line.951"></a>
+<span class="sourceLineNo">952</span>    this.serverManager = createServerManager(this);<a name="line.952"></a>
+<span class="sourceLineNo">953</span>    createProcedureExecutor();<a name="line.953"></a>
+<span class="sourceLineNo">954</span>    @SuppressWarnings("rawtypes")<a name="line.954"></a>
+<span class="sourceLineNo">955</span>    Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType =<a name="line.955"></a>
+<span class="sourceLineNo">956</span>      procedureExecutor.getActiveProceduresNoCopy().stream()<a name="line.956"></a>
+<span class="sourceLineNo">957</span>        .collect(Collectors.groupingBy(p -&gt; p.getClass()));<a name="line.957"></a>
+<span class="sourceLineNo">958</span><a name="line.958"></a>
+<span class="sourceLineNo">959</span>    checkUnsupportedProcedure(procsByType);<a name="line.959"></a>
+<span class="sourceLineNo">960</span><a name="line.960"></a>
+<span class="sourceLineNo">961</span>    // Create Assignment Manager<a name="line.961"></a>
+<span class="sourceLineNo">962</span>    this.assignmentManager = createAssignmentManager(this);<a name="line.962"></a>
+<span class="sourceLineNo">963</span>    this.assignmentManager.start();<a name="line.963"></a>
+<span class="sourceLineNo">964</span>    // TODO: TRSP can perform as the sub procedure for other procedures, so even if it is marked as<a name="line.964"></a>
+<span class="sourceLineNo">965</span>    // completed, it could still be in the procedure list. This is a bit strange but is another<a name="line.965"></a>
+<span class="sourceLineNo">966</span>    // story, need to verify the implementation for ProcedureExecutor and ProcedureStore.<a name="line.966"></a>
+<span class="sourceLineNo">967</span>    List&lt;TransitRegionStateProcedure&gt; ritList =<a name="line.967"></a>
+<span class="sourceLineNo">968</span>      procsByType.getOrDefault(TransitRegionStateProcedure.class, Collections.emptyList()).stream()<a name="line.968"></a>
+<span class="sourceLineNo">969</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p)<a name="line.969"></a>
+<span class="sourceLineNo">970</span>        .collect(Collectors.toList());<a name="line.970"></a>
+<span class="sourceLineNo">971</span>    this.assignmentManager.setupRIT(ritList);<a name="line.971"></a>
+<span class="sourceLineNo">972</span><a name="line.972"></a>
+<span class="sourceLineNo">973</span>    // Start RegionServerTracker with listing of servers found with exiting SCPs -- these should<a name="line.973"></a>
+<span class="sourceLineNo">974</span>    // be registered in the deadServers set -- and with the list of servernames out on the<a name="line.974"></a>
+<span class="sourceLineNo">975</span>    // filesystem that COULD BE 'alive' (we'll schedule SCPs for each and let SCP figure it out).<a name="line.975"></a>
+<span class="sourceLineNo">976</span>    // We also pass dirs that are already 'splitting'... so we can do some checks down in tracker.<a name="line.976"></a>
+<span class="sourceLineNo">977</span>    // TODO: Generate the splitting and live Set in one pass instead of two as we currently do.<a name="line.977"></a>
+<span class="sourceLineNo">978</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.978"></a>
+<span class="sourceLineNo">979</span>    this.regionServerTracker.start(<a name="line.979"></a>
+<span class="sourceLineNo">980</span>      procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.980"></a>
+<span class="sourceLineNo">981</span>        .map(p -&gt; (ServerCrashProcedure) p).map(p -&gt; p.getServerName()).collect(Collectors.toSet()),<a name="line.981"></a>
+<span class="sourceLineNo">982</span>      walManager.getLiveServersFromWALDir(), walManager.getSplittingServersFromWALDir());<a name="line.982"></a>
+<span class="sourceLineNo">983</span>    // This manager will be started AFTER hbase:meta is confirmed on line.<a name="line.983"></a>
+<span class="sourceLineNo">984</span>    // hbase.mirror.table.state.to.zookeeper is so hbase1 clients can connect. They read table<a name="line.984"></a>
+<span class="sourceLineNo">985</span>    // state from zookeeper while hbase2 reads it from hbase:meta. Disable if no hbase1 clients.<a name="line.985"></a>
+<span class="sourceLineNo">986</span>    this.tableStateManager =<a name="line.986"></a>
+<span class="sourceLineNo">987</span>      this.conf.getBoolean(MirroringTableStateManager.MIRROR_TABLE_STATE_TO_ZK_KEY, true)<a name="line.987"></a>
+<span class="sourceLineNo">988</span>        ?<a name="line.988"></a>
+<span class="sourceLineNo">989</span>        new MirroringTableStateManager(this):<a name="line.989"></a>
+<span class="sourceLineNo">990</span>        new TableStateManager(this);<a name="line.990"></a>
+<span class="sourceLineNo">991</span><a name="line.991"></a>
+<span class="sourceLineNo">992</span>    status.setStatus("Initializing ZK system trackers");<a name="line.992"></a>
+<span class="sourceLineNo">993</span>    initializeZKBasedSystemTrackers();<a name="line.993"></a>
+<span class="sourceLineNo">994</span>    status.setStatus("Loading last flushed sequence id of regions");<a name="line.994"></a>
+<span class="sourceLineNo">995</span>    try {<a name="line.995"></a>
+<span class="sourceLineNo">996</span>      this.serverManager.loadLastFlushedSequenceIds();<a name="line.996"></a>
+<span class="sourceLineNo">997</span>    } catch (IOException e) {<a name="line.997"></a>
+<span class="sourceLineNo">998</span>      LOG.debug("Failed to load last flushed sequence id of regions"<a name="line.998"></a>
+<span class="sourceLineNo">999</span>          + " from file system", e);<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>    }<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>    // Set ourselves as active Master now our claim has succeeded up in zk.<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>    this.activeMaster = true;<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span><a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>    // This is for backwards compatibility<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>    // See HBASE-11393<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>    ReplicationPeerConfigUpgrader tableCFsUpdater =<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>        new ReplicationPeerConfigUpgrader(zooKeeper, conf);<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>    tableCFsUpdater.copyTableCFs();<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span><a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>    if (!maintenanceMode) {<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>      // Add the Observer to delete quotas on table deletion before starting all CPs by<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>      // default with quota support, avoiding if user specifically asks to not load this Observer.<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>      if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>        updateConfigurationForQuotasObserver(conf);<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>      }<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>      // initialize master side coprocessors before we start handling requests<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>      status.setStatus("Initializing master coprocessors");<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>      this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>    }<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span><a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>    // Checking if meta needs initializing.<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>    status.setStatus("Initializing meta table if this is a new deploy");<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>    InitMetaProcedure initMetaProc = null;<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>    // Print out state of hbase:meta on startup; helps debugging.<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>    RegionState rs = this.assignmentManager.getRegionStates().<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>        getRegionState(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>    LOG.info("hbase:meta {}", rs);<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>    if (rs.isOffline()) {<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>      Optional&lt;InitMetaProcedure&gt; optProc = procedureExecutor.getProcedures().stream()<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>        .filter(p -&gt; p instanceof InitMetaProcedure).map(o -&gt; (InitMetaProcedure) o).findAny();<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      initMetaProc = optProc.orElseGet(() -&gt; {<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>        // schedule an init meta procedure if meta has not been deployed yet<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>        InitMetaProcedure temp = new InitMetaProcedure();<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>        procedureExecutor.submitProcedure(temp);<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>        return temp;<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>      });<a name="line.1037"></a>
 <span class="sourceLineNo">1038</span>    }<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span><a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>    // initialize load balancer<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>    this.balancer.setMasterServices(this);<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>    this.balancer.initialize();<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span><a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    // start up all service threads.<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    status.setStatus("Initializing master service threads");<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>    startServiceThreads();<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>    // wait meta to be initialized after we start procedure executor<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    if (initMetaProc != null) {<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>      initMetaProc.await();<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>    }<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    // Wake up this server to check in<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    sleeper.skipSleepCycle();<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span><a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    // Wait for region servers to report in.<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>    // With this as part of master initialization, it precludes our being able to start a single<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    // server that is both Master and RegionServer. Needs more thought. TODO.<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    String statusStr = "Wait for region servers to report in";<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    status.setStatus(statusStr);<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>    LOG.info(Objects.toString(status));<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>    waitForRegionServers(status);<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span><a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>    // Check if master is shutting down because issue initializing regionservers or balancer.<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    if (isStopped()) {<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>      return;<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    }<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span><a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    status.setStatus("Starting assignment manager");<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>    // FIRST HBASE:META READ!!!!<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    // The below cannot make progress w/o hbase:meta being online.<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    // This is the FIRST attempt at going to hbase:meta. Meta on-lining is going on in background<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    // as procedures run -- in particular SCPs for crashed servers... One should put up hbase:meta<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    // if it is down. It may take a while to come online. So, wait here until meta if for sure<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    // available. That's what waitForMetaOnline does.<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    if (!waitForMetaOnline()) {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>      return;<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    }<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>    this.assignmentManager.joinCluster();<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    // The below depends on hbase:meta being online.<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    this.tableStateManager.start();<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>    // Initialize after meta is up as below scans meta<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    if (favoredNodesManager != null &amp;&amp; !maintenanceMode) {<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>      SnapshotOfRegionAssignmentFromMeta snapshotOfRegionAssignment =<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>          new SnapshotOfRegionAssignmentFromMeta(getConnection());<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>      snapshotOfRegionAssignment.initialize();<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>      favoredNodesManager.initialize(snapshotOfRegionAssignment);<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>    }<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span><a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    // set cluster status again after user regions are assigned<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1090"></a>
+<span class="sourceLineNo">1039</span>    if (this.balancer instanceof FavoredNodesPromoter) {<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>      favoredNodesManager = new FavoredNodesManager(this);<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>    }<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span><a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>    // initialize load balancer<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>    this.balancer.setMasterServices(this);<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>    this.balancer.initialize();<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span><a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>    // start up all service threads.<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>    status.setStatus("Initializing master service threads");<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>    startServiceThreads();<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>    // wait meta to be initialized after we start procedure executor<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>    if (initMetaProc != null) {<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>      initMetaProc.await();<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>    }<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>    // Wake up this server to check in<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>    sleeper.skipSleepCycle();<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span><a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>    // Wait for region servers to report in.<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>    // With this as part of master initialization, it precludes our being able to start a single<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>    // server that is both Master and RegionServer. Needs more thought. TODO.<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    String statusStr = "Wait for region servers to report in";<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>    status.setStatus(statusStr);<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>    LOG.info(Objects.toString(status));<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>    waitForRegionServers(status);<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span><a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    // Check if master is shutting down because issue initializing regionservers or balancer.<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>    if (isStopped()) {<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>      return;<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>    }<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span><a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>    status.setStatus("Starting assignment manager");<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>    // FIRST HBASE:META READ!!!!<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>    // The below cannot make progress w/o hbase:meta being online.<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    // This is the FIRST attempt at going to hbase:meta. Meta on-lining is going on in background<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    // as procedures run -- in particular SCPs for crashed servers... One should put up hbase:meta<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    // if it is down. It may take a while to come online. So, wait here until meta if for sure<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    // available. That's what waitForMetaOnline does.<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>    if (!waitForMetaOnline()) {<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      return;<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>    }<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>    this.assignmentManager.joinCluster();<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>    // The below depends on hbase:meta being online.<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>    this.tableStateManager.start();<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>    // Initialize after meta is up as below scans meta<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    if (favoredNodesManager != null &amp;&amp; !maintenanceMode) {<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>      SnapshotOfRegionAssignmentFromMeta snapshotOfRegionAssignment =<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>          new SnapshotOfRegionAssignmentFromMeta(getConnection());<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      snapshotOfRegionAssignment.initialize();<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>      favoredNodesManager.initialize(snapshotOfRegionAssignment);<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>    }<a name="line.1090"></a>
 <span class="sourceLineNo">1091</span><a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>    this.balancerChore = new BalancerChore(this);<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>    getChoreService().scheduleChore(balancerChore);<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>    this.catalogJanitorChore = new CatalogJanitor(this);<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    this.serverManager.startChore();<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span><a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>    // NAMESPACE READ!!!!<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    // Here we expect hbase:namespace to be online. See inside initClusterSchemaService.<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    // TODO: Fix this. Namespace is a pain being a sort-of system table. Fold it in to hbase:meta.<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    // isNamespace does like isMeta and waits until namespace is onlined before allowing progress.<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    if (!waitForNamespaceOnline()) {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      return;<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    }<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>    status.setStatus("Starting cluster schema service");<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>    initClusterSchemaService();<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span><a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>    if (this.cpHost != null) {<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>      try {<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>        this.cpHost.preMasterInitialization();<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>      } catch (IOException e) {<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<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><a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>    status.markComplete("Initialization successful");<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    LOG.info(String.format("Master has completed initialization %.3fsec",<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>       (System.currentTimeMillis() - masterActiveTime) / 1000.0f));<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    this.masterFinishedInitializationTime = System.currentTimeMillis();<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>    configurationManager.registerObserver(this.balancer);<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    configurationManager.registerObserver(this.hfileCleaner);<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>    configurationManager.registerObserver(this.logCleaner);<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    // Set master as 'initialized'.<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>    setInitialized(true);<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span><a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    if (maintenanceMode) {<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>      LOG.info("Detected repair mode, skipping final initialization steps.");<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>      return;<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>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>    status.setStatus("Assign meta replicas");<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap();<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>    metaBootstrap.assignMetaReplicas();<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>    status.setStatus("Starting quota manager");<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>    initQuotaManager();<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>      // Create the quota snapshot notifier<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>      spaceQuotaSnapshotNotifier = createQuotaSnapshotNotifier();<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>      spaceQuotaSnapshotNotifier.initialize(getClusterConnection());<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>      this.quotaObserverChore = new QuotaObserverChore(this, getMasterMetrics());<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>      // Start the chore to read the region FS space reports and act on them<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>      getChoreService().scheduleChore(quotaObserverChore);<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span><a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>      this.snapshotQuotaChore = new SnapshotQuotaObserverChore(this, getMasterMetrics());<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>      // Start the chore to read snapshots and add their usage to table/NS quotas<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>      getChoreService().scheduleChore(snapshotQuotaChore);<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>    // clear the dead servers with same host name and port of online server because we are not<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    // removing dead server with same hostname and port of rs which is trying to check in before<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>    // master initialization. See HBASE-5916.<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    this.serverManager.clearDeadServersWithSameHostNameAndPortOfOnlineServer();<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span><a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    // Check and set the znode ACLs if needed in case we are overtaking a non-secure configuration<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>    status.setStatus("Checking ZNode ACLs");<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>    zooKeeper.checkAndSetZNodeAcls();<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span><a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    status.setStatus("Initializing MOB Cleaner");<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>    initMobCleaner();<a name="line.1166"></a>
+<span class="sourceLineNo">1092</span>    // set cluster status again after user regions are assigned<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span><a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>    this.balancerChore = new BalancerChore(this);<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>    getChoreService().scheduleChore(balancerChore);<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>    this.catalogJanitorChore = new CatalogJanitor(this);<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>    this.serverManager.startChore();<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span><a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>    // NAMESPACE READ!!!!<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    // Here we expect hbase:namespace to be online. See inside initClusterSchemaService.<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>    // TODO: Fix this. Namespace is a pain being a sort-of system table. Fold it in to hbase:meta.<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>    // isNamespace does like isMeta and waits until namespace is onlined before allowing progress.<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>    if (!waitForNamespaceOnline()) {<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>      return;<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>    }<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>    status.setStatus("Starting cluster schema service");<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>    initClusterSchemaService();<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span><a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>    if (this.cpHost != null) {<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>      try {<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>        this.cpHost.preMasterInitialization();<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>      } catch (IOException e) {<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<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><a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>    status.markComplete("Initialization successful");<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>    LOG.info(String.format("Master has completed initialization %.3fsec",<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>       (System.currentTimeMillis() - masterActiveTime) / 1000.0f));<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    this.masterFinishedInitializationTime = System.currentTimeMillis();<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>    configurationManager.registerObserver(this.balancer);<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>    configurationManager.registerObserver(this.hfileCleaner);<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    configurationManager.registerObserver(this.logCleaner);<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>    // Set master as 'initialized'.<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    setInitialized(true);<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span><a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>    if (maintenanceMode) {<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>      LOG.info("Detected repair mode, skipping final initialization steps.");<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>      return;<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>    }<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span><a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>    status.setStatus("Assign meta replicas");<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap();<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>    metaBootstrap.assignMetaReplicas();<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>    status.setStatus("Starting quota manager");<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>    initQuotaManager();<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>      // Create the quota snapshot notifier<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>      spaceQuotaSnapshotNotifier = createQuotaSnapshotNotifier();<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>      spaceQuotaSnapshotNotifier.initialize(getClusterConnection());<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>      this.quotaObserverChore = new QuotaObserverChore(this, getMasterMetrics());<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>      // Start the chore to read the region FS space reports and act on them<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>      getChoreService().scheduleChore(quotaObserverChore);<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span><a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>      this.snapshotQuotaChore = new SnapshotQuotaObserverChore(this, getMasterMetrics());<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>      // Start the chore to read snapshots and add their usage to table/NS quotas<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>      getChoreService().scheduleChore(snapshotQuotaChore);<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>    }<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span><a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>    // clear the dead servers with same host name and port of online server because we are not<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>    // removing dead server with same hostname and port of rs which is trying to check in before<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>    // master initialization. See HBASE-5916.<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>    this.serverManager.clearDeadServersWithSameHostNameAndPortOfOnlineServer();<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span><a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>    // Check and set the znode ACLs if needed in case we are overtaking a non-secure configuration<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>    status.setStatus("Checking ZNode ACLs");<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>    zooKeeper.checkAndSetZNodeAcls();<a name="line.1166"></a>
 <span class="sourceLineNo">1167</span><a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>    status.setStatus("Calling postStartMaster coprocessors");<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    if (this.cpHost != null) {<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>      // don't let cp initialization errors kill the master<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>      try {<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>        this.cpHost.postStartMaster();<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>      } catch (IOException ioe) {<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>        LOG.error("Coprocessor postStartMaster() hook failed", ioe);<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>      }<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>    }<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span><a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>    zombieDetector.interrupt();<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span><a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>    /*<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>     * After master has started up, lets do balancer post startup initialization. Since this runs<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>     * in activeMasterManager thread, it should be fine.<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>     */<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>    long start = System.currentTimeMillis();<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    this.balancer.postMasterStartupInitialize();<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    if (LOG.isDebugEnabled()) {<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>      LOG.debug("Balancer post startup initialization complete, took " + (<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>          (System.currentTimeMillis() - start) / 1000) + " seconds");<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>   * Check hbase:meta is up and ready for reading. For use during Master startup only.<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>   * @return True if meta is UP and online and startup can progress. Otherwise, meta is not online<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>   *   and we will hold here until operator intervention.<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>   */<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>  @VisibleForTesting<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>  public boolean waitForMetaOnline() throws InterruptedException {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>    return isRegionOnline(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>  }<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>   * @return True if region is online and scannable else false if an error or shutdown (Otherwise<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>   *   we just block in here holding up all forward-progess).<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>   */<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>  private boolean isRegionOnline(RegionInfo ri) throws InterruptedException {<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>    RetryCounter rc = null;<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>    while (!isStopped()) {<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>      RegionState rs = this.assignmentManager.getRegionStates().getRegionState(ri);<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>      if (rs.isOpened()) {<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>        if (this.getServerManager().isServerOnline(rs.getServerName())) {<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>          return true;<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>        }<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>      }<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>      // Region is not OPEN.<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>      Optional&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; optProc = this.procedureExecutor.getProcedures().<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>          stream().filter(p -&gt; p instanceof ServerCrashProcedure).findAny();<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      // TODO: Add a page to refguide on how to do repair. Have this log message point to it.<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>      // Page will talk about loss of edits, how to schedule at least the meta WAL recovery, and<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>      // then how to assign including how to break region lock if one held.<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>      LOG.warn("{} is NOT online; state={}; ServerCrashProcedures={}. Master startup cannot " +<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>          "progress, in holding-pattern until region onlined.",<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>          ri.getRegionNameAsString(), rs, optProc.isPresent());<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>      // Check once-a-minute.<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>      if (rc == null) {<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>        rc = new RetryCounterFactory(1000).create();<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>      }<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>      Threads.sleep(rc.getBackoffTimeAndIncrementAttempts());<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>    }<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>    return false;<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>   * Check hbase:namespace table is assigned. If not, startup will hang looking for the ns table<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>   * (TODO: Fix this! NS should not hold-up startup).<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>   * @return True if namespace table is up/online.<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>   */<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>  @VisibleForTesting<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>  public boolean waitForNamespaceOnline() throws InterruptedException {<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>    List&lt;RegionInfo&gt; ris = this.assignmentManager.getRegionStates().<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>        getRegionsOfTable(TableName.NAMESPACE_TABLE_NAME);<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>    if (ris.isEmpty()) {<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>      // If empty, means we've not assigned the namespace table yet... Just return true so startup<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>      // continues and the namespace table gets created.<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>      return true;<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>    }<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>    // Else there are namespace regions up in meta. Ensure they are assigned before we go on.<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>    for (RegionInfo ri: ris) {<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>      isRegionOnline(ri);<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>    }<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>    return true;<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>  }<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span><a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>  /**<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>   * Adds the {@code MasterQuotasObserver} to the list of configured Master observers to<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>   * automatically remove quotas for a table when that table is deleted.<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>   */<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>  @VisibleForTesting<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>  public void updateConfigurationForQuotasObserver(Configuration conf) {<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>    // We're configured to not delete quotas on table deletion, so we don't need to add the obs.<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>    if (!conf.getBoolean(<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>          MasterQuotasObserver.REMOVE_QUOTA_ON_TABLE_DELETE,<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>          MasterQuotasObserver.REMOVE_QUOTA_ON_TABLE_DELETE_DEFAULT)) {<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>      return;<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>    }<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>    String[] masterCoprocs = conf.getStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY);<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>    final int length = null == masterCoprocs ? 0 : masterCoprocs.length;<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>    String[] updatedCoprocs = new String[length + 1];<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>    if (length &gt; 0) {<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>      System.arraycopy(masterCoprocs, 0, updatedCoprocs, 0, masterCoprocs.length);<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>    }<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>    updatedCoprocs[length] = MasterQuotasObserver.class.getName();<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>    conf.setStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, updatedCoprocs);<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>  }<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span><a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>  private void initMobCleaner() {<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>    this.expiredMobFileCleanerChore = new ExpiredMobFileCleanerChore(this);<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>    getChoreService().scheduleChore(expiredMobFileCleanerChore);<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span><a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>    int mobCompactionPeriod = conf.getInt(MobConstants.MOB_COMPACTION_CHORE_PERIOD,<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>        MobConstants.DEFAULT_MOB_COMPACTION_CHORE_PERIOD);<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>    if (mobCompactionPeriod &gt; 0) {<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>      this.mobCompactChore = new MobCompactionChore(this, mobCompactionPeriod);<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>      getChoreService().scheduleChore(mobCompactChore);<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>    } else {<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>      LOG<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>        .info("The period is " + mobCompactionPeriod + " seconds, MobCompactionChore is disabled");<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>    }<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>    this.mobCompactThread = new MasterMobCompactionThread(this);<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>  }<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span><a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>  /**<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>   * &lt;p&gt;<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>   * Create a {@link MasterMetaBootstrap} instance.<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>   * &lt;/p&gt;<a name="line.1295"></a>
+<span class="sourceLineNo">1168</span>    status.setStatus("Initializing MOB Cleaner");<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>    initMobCleaner();<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span><a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>    status.setStatus("Calling postStartMaster coprocessors");<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>    if (this.cpHost != null) {<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>      // don't let cp initialization errors kill the master<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>      try {<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>        this.cpHost.postStartMaster();<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>      } catch (IOException ioe) {<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>        LOG.error("Coprocessor postStartMaster() hook failed", ioe);<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>      }<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>    }<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span><a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>    zombieDetector.interrupt();<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>     * After master has started up, lets do balancer post startup initialization. Since this runs<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>     * in activeMasterManager thread, it should be fine.<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>     */<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>    long start = System.currentTimeMillis();<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>    this.balancer.postMasterStartupInitialize();<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>    if (LOG.isDebugEnabled()) {<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>      LOG.debug("Balancer post startup initialization complete, took " + (<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>          (System.currentTimeMillis() - start) / 1000) + " seconds");<a name="line.1191"></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><a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>  /**<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>   * Check hbase:meta is up and ready for reading. For use during Master startup only.<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>   * @return True if meta is UP and online and startup can progress. Otherwise, meta is not online<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>   *   and we will hold here until operator intervention.<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>   */<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>  @VisibleForTesting<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>  public boolean waitForMetaOnline() throws InterruptedException {<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    return isRegionOnline(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>  }<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>   * @return True if region is online and scannable else false if an error or shutdown (Otherwise<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>   *   we just block in here holding up all forward-progess).<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>   */<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>  private boolean isRegionOnline(RegionInfo ri) throws InterruptedException {<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>    RetryCounter rc = null;<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>    while (!isStopped()) {<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>      RegionState rs = this.assignmentManager.getRegionStates().getRegionState(ri);<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>      if (rs.isOpened()) {<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>        if (this.getServerManager().isServerOnline(rs.getServerName())) {<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>          return true;<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>        }<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>      }<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>      // Region is not OPEN.<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      Optional&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; optProc = this.procedureExecutor.getProcedures().<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>          stream().filter(p -&gt; p instanceof ServerCrashProcedure).findAny();<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>      // TODO: Add a page to refguide on how to do repair. Have this log message point to it.<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>      // Page will talk about loss of edits, how to schedule at least the meta WAL recovery, and<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>      // then how to assign including how to break region lock if one held.<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>      LOG.warn("{} is NOT online; state={}; ServerCrashProcedures={}. Master startup cannot " +<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>          "progress, in holding-pattern until region onlined.",<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>          ri.getRegionNameAsString(), rs, optProc.isPresent());<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>      // Check once-a-minute.<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      if (rc == null) {<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>        rc = new RetryCounterFactory(1000).create();<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>      }<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>      Threads.sleep(rc.getBackoffTimeAndIncrementAttempts());<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>    }<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>    return false;<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>  /**<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>   * Check hbase:namespace table is assigned. If not, startup will hang looking for the ns table<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>   * (TODO: Fix this! NS should not hold-up startup).<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>   * @return True if namespace table is up/online.<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>   */<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>  @VisibleForTesting<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>  public boolean waitForNamespaceOnline() throws InterruptedException {<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>    List&lt;RegionInfo&gt; ris = this.assignmentManager.getRegionStates().<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>        getRegionsOfTable(TableName.NAMESPACE_TABLE_NAME);<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>    if (ris.isEmpty()) {<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>      // If empty, means we've not assigned the namespace table yet... Just return true so startup<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>      // continues and the namespace table gets created.<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>      return true;<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>    }<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>    // Else there are namespace regions up in meta. Ensure they are assigned before we go on.<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>    for (RegionInfo ri: ris) {<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>      isRegionOnline(ri);<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>    }<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>    return true;<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>  }<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span><a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>  /**<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>   * Adds the {@code MasterQuotasObserver} to the list of configured Master observers to<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>   * automatically remove quotas for a table when that table is deleted.<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>   */<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>  @VisibleForTesting<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>  public void updateConfigurationForQuotasObserver(Configuration conf) {<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>    // We're configured to not delete quotas on table deletion, so we don't need to add the obs.<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>    if (!conf.getBoolean(<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>          MasterQuotasObserver.REMOVE_QUOTA_ON_TABLE_DELETE,<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>          MasterQuotasObserver.REMOVE_QUOTA_ON_TABLE_DELETE_DEFAULT)) {<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>      return;<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>    }<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>    String[] masterCoprocs = conf.getStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY);<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>    final int length = null == masterCoprocs ? 0 : masterCoprocs.length;<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>    String[] updatedCoprocs = new String[length + 1];<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>    if (length &gt; 0) {<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>      System.arraycopy(masterCoprocs, 0, updatedCoprocs, 0, masterCoprocs.length);<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>    }<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>    updatedCoprocs[length] = MasterQuotasObserver.class.getName();<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>    conf.setStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, updatedCoprocs);<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>  }<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span><a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>  private void initMobCleaner() {<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>    this.expiredMobFileCleanerChore = new ExpiredMobFileCleanerChore(this);<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>    getChoreService().scheduleChore(expiredMobFileCleanerChore);<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span><a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>    int mobCompactionPeriod = conf.getInt(MobConstants.MOB_COMPACTION_CHORE_PERIOD,<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>        MobConstants.DEFAULT_MOB_COMPACTION_CHORE_PERIOD);<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>    if (mobCompactionPeriod &gt; 0) {<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>      this.mobCompactChore = new MobCompactionChore(this, mobCompactionPeriod);<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>      getChoreService().scheduleChore(mobCompactChore);<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>    } else {<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>      LOG<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>        .info("The period is " + mobCompactionPeriod + " seconds, MobCompactionChore is disabled");<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>    }<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>    this.mobCompactThread = new MasterMobCompactionThread(this);<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>  /**<a name="line.1295"></a>
 <span class="sourceLineNo">1296</span>   * &lt;p&gt;<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>   * Will be overridden in tests.<a name="line.1297"></a>
+<span class="sourceLineNo">1297</span>   * Create a {@link MasterMetaBootstrap} instance.<a name="line.1297"></a>
 <span class="sourceLineNo">1298</span>   * &lt;/p&gt;<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>   */<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>  @VisibleForTesting<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>  protected MasterMetaBootstrap createMetaBootstrap() {<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>    // w/ a mocked up MasterMetaBootstrap.<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>    return new MasterMetaBootstrap(this);<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>  }<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span><a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>  /**<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>   * &lt;p&gt;<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>   * Create a {@link ServerManager} instance.<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>   * &lt;/p&gt;<a name="line.1310"></a>
+<span class="sourceLineNo">1299</span>   * &lt;p&gt;<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>   * Will be overridden in tests.<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>   * &lt;/p&gt;<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>   */<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>  @VisibleForTesting<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>  protected MasterMetaBootstrap createMetaBootstrap() {<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>    // w/ a mocked up MasterMetaBootstrap.<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>    return new MasterMetaBootstrap(this);<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>  }<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span><a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>  /**<a name="line.1310"></a>
 <span class="sourceLineNo">1311</span>   * &lt;p&gt;<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>   * Will be overridden in tests.<a name="line.1312"></a>
+<span class="sourceLineNo">1312</span>   * Create a {@link ServerManager} instance.<a name="line.1312"></a>
 <span class="sourceLineNo">1313</span>   * &lt;/p&gt;<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>   */<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>  @VisibleForTesting<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>  protected ServerManager createServerManager(final MasterServices master) throws IOException {<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>    // w/ a mocked up ServerManager.<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>    setupClusterConnection();<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>    return new ServerManager(master);<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>  }<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span><a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>  private void waitForRegionServers(final MonitoredTask status)<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>      throws IOException, InterruptedException {<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>    this.serverManager.waitForRegionServers(status);<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>  }<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span><a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>  // Will be overridden in tests<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>  @VisibleForTesting<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>  protected void initClusterSchemaService() throws IOException, InterruptedException {<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>    this.clusterSchemaService = new ClusterSchemaServiceImpl(this);<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>    this.clusterSchemaService.startAsync();<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>    try {<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>      this.clusterSchemaService.awaitRunning(getConfiguration().getInt(<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>        HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS,<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>        DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS), TimeUnit.SECONDS);<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    } catch (TimeoutException toe) {<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>      throw new IOException("Timedout starting ClusterSchemaService", toe);<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    }<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>  }<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span><a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>  private void initQuotaManager() throws IOException {<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>    MasterQuotaManager quotaManager = new MasterQuotaManager(this);<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>    quotaManager.start();<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>    this.quotaManager = quotaManager;<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>  }<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span><a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>  private SpaceQuotaSnapshotNotifier createQuotaSnapshotNotifier() {<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    SpaceQuotaSnapshotNotifier notifier =<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>        SpaceQuotaSnapshotNotifierFactory.getInstance().create(getConfiguration());<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    return notifier;<a name

<TRUNCATED>

[24/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/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 9fd492a..8ff6175 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/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/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">CompareFilter.CompareOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/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/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/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/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/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/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/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/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/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 008643d..b517148 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -274,12 +274,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheConfig.ExternalBlockCaches</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
 <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/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/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/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 b11f6ad..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/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/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>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/devapidocs/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
index 9fafb83..28c849a 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
@@ -136,7 +136,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3056">HMaster.MasterStoppedException</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3059">HMaster.MasterStoppedException</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/DoNotRetryIOException.html" title="class in org.apache.hadoop.hbase">DoNotRetryIOException</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -205,7 +205,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/DoNotRetryIOException.ht
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MasterStoppedException</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html#line.3057">MasterStoppedException</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html#line.3060">MasterStoppedException</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/devapidocs/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html
index c7f8e03..fbd4c9f 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html
@@ -105,7 +105,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>protected static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2475">HMaster.TableDescriptorGetter</a></pre>
+<pre>protected static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2478">HMaster.TableDescriptorGetter</a></pre>
 <div class="block">Implement to return TableDescriptor after pre-checks</div>
 </li>
 </ul>
@@ -150,7 +150,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>get</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html#line.2476">get</a>()
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html#line.2479">get</a>()
              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>


[25/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

Posted by gi...@apache.org.
Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.


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

Branch: refs/heads/asf-site
Commit: 0f0847e0806133227f151ca3f8cbc9981140a28c
Parents: e459403
Author: jenkins <bu...@apache.org>
Authored: Thu Nov 1 14:53:39 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Thu Nov 1 14:53:39 2018 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |    4 +-
 apache_hbase_reference_guide.pdf                |    4 +-
 book.html                                       |    2 +-
 bulk-loads.html                                 |    4 +-
 checkstyle-aggregate.html                       |  444 +-
 checkstyle.rss                                  |   16 +-
 coc.html                                        |    4 +-
 dependencies.html                               |    4 +-
 dependency-convergence.html                     |    4 +-
 dependency-info.html                            |    4 +-
 dependency-management.html                      |    4 +-
 devapidocs/constant-values.html                 |    4 +-
 .../hadoop/hbase/backup/package-tree.html       |    4 +-
 .../hadoop/hbase/client/package-tree.html       |   28 +-
 .../hadoop/hbase/executor/package-tree.html     |    2 +-
 .../hadoop/hbase/filter/package-tree.html       |   10 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |    6 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |    4 +-
 .../master/HMaster.MasterStoppedException.html  |    4 +-
 .../master/HMaster.TableDescriptorGetter.html   |    4 +-
 .../org/apache/hadoop/hbase/master/HMaster.html |  318 +-
 .../hbase/master/balancer/package-tree.html     |    2 +-
 .../hadoop/hbase/master/package-tree.html       |    4 +-
 .../hbase/master/procedure/package-tree.html    |    2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |   14 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    2 +-
 .../hadoop/hbase/quotas/package-tree.html       |    8 +-
 ...ator.MemStoreChunkPool.StatisticsThread.html |    8 +-
 .../ChunkCreator.MemStoreChunkPool.html         |   34 +-
 .../hadoop/hbase/regionserver/ChunkCreator.html |   54 +-
 .../HRegionServer.CompactionChecker.html        |   14 +-
 .../HRegionServer.MovedRegionInfo.html          |   16 +-
 .../HRegionServer.MovedRegionsCleaner.html      |   16 +-
 .../HRegionServer.PeriodicMemStoreFlusher.html  |   14 +-
 ...RegionServer.SystemExitWhenAbortTimeout.html |    6 +-
 .../hbase/regionserver/HRegionServer.html       |  350 +-
 .../regionserver/class-use/ChunkCreator.html    |    2 +-
 .../hadoop/hbase/regionserver/package-tree.html |   16 +-
 .../regionserver/querymatcher/package-tree.html |    2 +-
 .../hbase/regionserver/wal/package-tree.html    |    2 +-
 .../replication/regionserver/package-tree.html  |    2 +-
 .../hadoop/hbase/security/package-tree.html     |    2 +-
 .../hadoop/hbase/thrift/package-tree.html       |    4 +-
 .../apache/hadoop/hbase/util/package-tree.html  |    8 +-
 .../org/apache/hadoop/hbase/Version.html        |    4 +-
 .../master/HMaster.InitializationMonitor.html   | 5995 ++++++++--------
 .../master/HMaster.MasterStoppedException.html  | 5995 ++++++++--------
 .../hbase/master/HMaster.RedirectServlet.html   | 5995 ++++++++--------
 .../master/HMaster.TableDescriptorGetter.html   | 5995 ++++++++--------
 .../org/apache/hadoop/hbase/master/HMaster.html | 5995 ++++++++--------
 .../regionserver/ChunkCreator.ChunkType.html    | 1011 +--
 ...ator.MemStoreChunkPool.StatisticsThread.html | 1011 +--
 .../ChunkCreator.MemStoreChunkPool.html         | 1011 +--
 .../hadoop/hbase/regionserver/ChunkCreator.html | 1011 +--
 .../HRegionServer.CompactionChecker.html        | 6469 +++++++++---------
 .../HRegionServer.MovedRegionInfo.html          | 6469 +++++++++---------
 .../HRegionServer.MovedRegionsCleaner.html      | 6469 +++++++++---------
 .../HRegionServer.PeriodicMemStoreFlusher.html  | 6469 +++++++++---------
 ...RegionServer.SystemExitWhenAbortTimeout.html | 6469 +++++++++---------
 .../hbase/regionserver/HRegionServer.html       | 6469 +++++++++---------
 downloads.html                                  |   18 +-
 export_control.html                             |    4 +-
 index.html                                      |    4 +-
 integration.html                                |    4 +-
 issue-tracking.html                             |    4 +-
 license.html                                    |    4 +-
 mail-lists.html                                 |    4 +-
 metrics.html                                    |    4 +-
 old_news.html                                   |    4 +-
 plugin-management.html                          |    4 +-
 plugins.html                                    |    4 +-
 poweredbyhbase.html                             |    4 +-
 project-info.html                               |    4 +-
 project-reports.html                            |    4 +-
 project-summary.html                            |    4 +-
 pseudo-distributed.html                         |    4 +-
 replication.html                                |    4 +-
 resources.html                                  |    4 +-
 source-repository.html                          |    4 +-
 sponsors.html                                   |    4 +-
 supportingprojects.html                         |    4 +-
 team-list.html                                  |    4 +-
 testdevapidocs/allclasses-frame.html            |    1 +
 testdevapidocs/allclasses-noframe.html          |    1 +
 testdevapidocs/index-all.html                   |   22 +-
 .../hadoop/hbase/backup/package-tree.html       |    2 +-
 .../hbase/class-use/HBaseClassTestRule.html     |   34 +-
 .../hbase/class-use/HBaseTestingUtility.html    |   12 +-
 .../apache/hadoop/hbase/master/TestMaster.html  |   57 +-
 .../hbase/master/TestMasterNoCluster.html       |    4 +-
 .../hbase/master/TestMasterNotCarryTable.html   |  409 ++
 .../TestMasterOperationsForRegionReplicas.html  |    4 +-
 .../class-use/TestMasterNotCarryTable.html      |  125 +
 .../hadoop/hbase/master/package-frame.html      |    1 +
 .../hadoop/hbase/master/package-summary.html    |   62 +-
 .../hadoop/hbase/master/package-tree.html       |    1 +
 .../org/apache/hadoop/hbase/package-tree.html   |    8 +-
 .../hadoop/hbase/procedure/package-tree.html    |    8 +-
 .../hadoop/hbase/regionserver/package-tree.html |    6 +-
 .../apache/hadoop/hbase/test/package-tree.html  |    6 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |    2 +-
 testdevapidocs/overview-tree.html               |    1 +
 .../apache/hadoop/hbase/master/TestMaster.html  |  493 +-
 .../hbase/master/TestMasterNotCarryTable.html   |  162 +
 104 files changed, 38280 insertions(+), 37540 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index 3ddcb0f..b4560d8 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index bf12236..1607430 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:20181030143402+00'00')
-/CreationDate (D:20181030145049+00'00')
+/ModDate (D:20181101143311+00'00')
+/CreationDate (D:20181101145027+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index 2629187..f84ec8b 100644
--- a/book.html
+++ b/book.html
@@ -41078,7 +41078,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-10-30 14:34:02 UTC
+Last updated 2018-11-01 14:33:11 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index 4e7ab92..7cb80f0 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index b4c3b8c..8c31996 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -291,7 +291,7 @@
 <th><img src="images/icon_warning_sml.gif" alt="" />&#160;Warnings</th>
 <th><img src="images/icon_error_sml.gif" alt="" />&#160;Errors</th></tr>
 <tr class="b">
-<td>3808</td>
+<td>3809</td>
 <td>0</td>
 <td>0</td>
 <td>15080</td></tr></table></div>
@@ -9826,12 +9826,12 @@
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#JavadocTagContinuationIndentation">JavadocTagContinuationIndentation</a>
 <ul>
 <li>offset: <tt>&quot;2&quot;</tt></li></ul></td>
-<td>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>
@@ -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">
@@ -60214,830 +60214,830 @@
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
-<td>Method length is 286 lines (max allowed is 150).</td>
+<td>Method length is 289 lines (max allowed is 150).</td>
 <td>904</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 3, expected level should be 4.</td>
-<td>1402</td></tr>
+<td>1405</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 3, expected level should be 4.</td>
-<td>1404</td></tr>
+<td>1407</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 3, expected level should be 4.</td>
-<td>1406</td></tr>
+<td>1409</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 3, expected level should be 4.</td>
-<td>1408</td></tr>
+<td>1411</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 3, expected level should be 4.</td>
-<td>1410</td></tr>
+<td>1413</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 3, expected level should be 4.</td>
-<td>1418</td></tr>
+<td>1421</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 3, expected level should be 4.</td>
-<td>1419</td></tr>
+<td>1422</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 3, expected level should be 4.</td>
-<td>1424</td></tr>
+<td>1427</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 3, expected level should be 4.</td>
-<td>1425</td></tr>
+<td>1428</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>1639</td></tr>
+<td>1642</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>1661</td></tr>
+<td>1664</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>1678</td></tr>
+<td>1681</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>1713</td></tr>
+<td>1716</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' is preceded with whitespace.</td>
-<td>1866</td></tr>
+<td>1869</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' is preceded with whitespace.</td>
-<td>1870</td></tr>
+<td>1873</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1882</td></tr>
+<td>1885</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>1884</td></tr>
+<td>1887</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>1886</td></tr>
+<td>1889</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>1889</td></tr>
+<td>1892</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>1892</td></tr>
+<td>1895</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1893</td></tr>
+<td>1896</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1895</td></tr>
+<td>1898</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>1897</td></tr>
+<td>1900</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1898</td></tr>
+<td>1901</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>1899</td></tr>
+<td>1902</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1905</td></tr>
+<td>1908</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1909</td></tr>
+<td>1912</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>1911</td></tr>
+<td>1914</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>1912</td></tr>
+<td>1915</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>1915</td></tr>
+<td>1918</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1916</td></tr>
+<td>1919</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1918</td></tr>
+<td>1921</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>1920</td></tr>
+<td>1923</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1921</td></tr>
+<td>1924</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>1922</td></tr>
+<td>1925</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 116).</td>
-<td>1941</td></tr>
+<td>1944</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
-<td>1943</td></tr>
+<td>1946</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2034</td></tr>
+<td>2037</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2036</td></tr>
+<td>2039</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2038</td></tr>
+<td>2041</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2045</td></tr>
+<td>2048</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2046</td></tr>
+<td>2049</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2048</td></tr>
+<td>2051</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2050</td></tr>
+<td>2053</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2051</td></tr>
+<td>2054</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2053</td></tr>
+<td>2056</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2055</td></tr>
+<td>2058</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2056</td></tr>
+<td>2059</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2057</td></tr>
+<td>2060</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2087</td></tr>
+<td>2090</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>2349</td></tr>
+<td>2352</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>2350</td></tr>
+<td>2353</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>2357</td></tr>
+<td>2360</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>2358</td></tr>
+<td>2361</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>2364</td></tr>
+<td>2367</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>2365</td></tr>
+<td>2368</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>2372</td></tr>
+<td>2375</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>2373</td></tr>
+<td>2376</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>2378</td></tr>
+<td>2381</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2396</td></tr>
+<td>2399</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2398</td></tr>
+<td>2401</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2400</td></tr>
+<td>2403</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2406</td></tr>
+<td>2409</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2407</td></tr>
+<td>2410</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2409</td></tr>
+<td>2412</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2411</td></tr>
+<td>2414</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2412</td></tr>
+<td>2415</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2414</td></tr>
+<td>2417</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2416</td></tr>
+<td>2419</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2417</td></tr>
+<td>2420</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2418</td></tr>
+<td>2421</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2431</td></tr>
+<td>2434</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2433</td></tr>
+<td>2436</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2435</td></tr>
+<td>2438</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2436</td></tr>
+<td>2439</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2437</td></tr>
+<td>2440</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2439</td></tr>
+<td>2442</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2441</td></tr>
+<td>2444</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2442</td></tr>
+<td>2445</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2444</td></tr>
+<td>2447</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2446</td></tr>
+<td>2449</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2447</td></tr>
+<td>2450</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2448</td></tr>
+<td>2451</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2531</td></tr>
+<td>2534</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2533</td></tr>
+<td>2536</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2539</td></tr>
+<td>2542</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2540</td></tr>
+<td>2543</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
-<td>2541</td></tr>
+<td>2544</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 12, expected level should be one of the following: 14, 16.</td>
-<td>2542</td></tr>
+<td>2545</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 12, expected level should be one of the following: 14, 16.</td>
-<td>2543</td></tr>
+<td>2546</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 14, expected level should be one of the following: 16, 18.</td>
-<td>2544</td></tr>
+<td>2547</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 14, expected level should be one of the following: 16, 18.</td>
-<td>2545</td></tr>
+<td>2548</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 16, expected level should be one of the following: 18, 20.</td>
-<td>2546</td></tr>
+<td>2549</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 14, expected level should be one of the following: 16, 18.</td>
-<td>2548</td></tr>
+<td>2551</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 12, expected level should be one of the following: 14, 16.</td>
-<td>2549</td></tr>
+<td>2552</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
-<td>2550</td></tr>
+<td>2553</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 12, expected level should be one of the following: 14, 16.</td>
-<td>2551</td></tr>
+<td>2554</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
-<td>2552</td></tr>
+<td>2555</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2553</td></tr>
+<td>2556</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2555</td></tr>
+<td>2558</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2562</td></tr>
+<td>2565</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2563</td></tr>
+<td>2566</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2565</td></tr>
+<td>2568</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2567</td></tr>
+<td>2570</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2568</td></tr>
+<td>2571</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2570</td></tr>
+<td>2573</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2572</td></tr>
+<td>2575</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2573</td></tr>
+<td>2576</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2574</td></tr>
+<td>2577</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2584</td></tr>
+<td>2587</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2586</td></tr>
+<td>2589</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2588</td></tr>
+<td>2591</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2598</td></tr>
+<td>2601</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2599</td></tr>
+<td>2602</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2601</td></tr>
+<td>2604</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2603</td></tr>
+<td>2606</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2604</td></tr>
+<td>2607</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2606</td></tr>
+<td>2609</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2608</td></tr>
+<td>2611</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2609</td></tr>
+<td>2612</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2610</td></tr>
+<td>2613</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>2622</td></tr>
+<td>2625</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2707</td></tr>
+<td>2710</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2711</td></tr>
+<td>2714</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2713</td></tr>
+<td>2716</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2715</td></tr>
+<td>2718</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2716</td></tr>
+<td>2719</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2717</td></tr>
+<td>2720</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>3175</td></tr>
+<td>3178</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>3351</td></tr>
+<td>3354</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>3353</td></tr>
+<td>3356</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>3446</td></tr>
+<td>3449</td></tr>
 <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>3476</td></tr>
+<td>3479</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3483</td></tr>
+<td>3486</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>3488</td></tr>
+<td>3491</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>3517</td></tr>
+<td>3520</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 111).</td>
-<td>3615</td></tr></table></div>
+<td>3618</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.HMasterCommandLine.java">org/apache/hadoop/hbase/master/HMasterCommandLine.java</h3>
 <table border="0" class="table table-striped">
@@ -74801,25 +74801,25 @@
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
-<td>357</td></tr>
+<td>358</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>398</td></tr>
+<td>399</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>423</td></tr>
+<td>424</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>457</td></tr></table></div>
+<td>458</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.CompactSplit.java">org/apache/hadoop/hbase/regionserver/CompactSplit.java</h3>
 <table border="0" class="table table-striped">
@@ -77195,445 +77195,445 @@
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
-<td>777</td></tr>
+<td>776</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>786</td></tr>
+<td>785</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>806</td></tr>
+<td>805</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>807</td></tr>
+<td>806</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>812</td></tr>
+<td>811</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>827</td></tr>
+<td>826</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>915</td></tr>
+<td>914</td></tr>
 <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 244 lines (max allowed is 150).</td>
-<td>938</td></tr>
+<td>937</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>1078</td></tr>
+<td>1077</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>1079</td></tr>
+<td>1078</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>1080</td></tr>
+<td>1079</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
-<td>1088</td></tr>
+<td>1087</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>1101</td></tr>
+<td>1100</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>1189</td></tr>
+<td>1188</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>1403</td></tr>
+<td>1402</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1499</td></tr>
+<td>1498</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'initialCountPercentage' has incorrect indentation level 6, expected level should be 8.</td>
-<td>1609</td></tr>
+<td>1608</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1712</td></tr>
+<td>1711</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child has incorrect indentation level 16, expected level should be 18.</td>
-<td>1769</td></tr>
+<td>1768</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 115).</td>
-<td>1795</td></tr>
+<td>1794</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>1803</td></tr>
+<td>1802</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1867</td></tr>
+<td>1866</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'HConstants' has incorrect indentation level 6, expected level should be 8.</td>
-<td>1919</td></tr>
+<td>1918</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'conf' has incorrect indentation level 4, expected level should be 6.</td>
-<td>1933</td></tr>
+<td>1932</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'&quot;hbase.regionserver.wal.max.splitters&quot;' has incorrect indentation level 4, expected level should be 6.</td>
-<td>1954</td></tr>
+<td>1953</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child has incorrect indentation level 4, expected level should be 6.</td>
-<td>1969</td></tr>
+<td>1968</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>1974</td></tr>
+<td>1973</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>1975</td></tr>
+<td>1974</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>1976</td></tr>
+<td>1975</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>1977</td></tr>
+<td>1976</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>1978</td></tr>
+<td>1977</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>1979</td></tr>
+<td>1978</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>1980</td></tr>
+<td>1979</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child has incorrect indentation level 4, expected level should be 6.</td>
-<td>1985</td></tr>
+<td>1984</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>2068</td></tr>
+<td>2067</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>2081</td></tr>
+<td>2080</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>2338</td></tr>
+<td>2337</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>2494</td></tr>
+<td>2493</td></tr>
 <tr class="b">
 <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>2510</td></tr>
+<td>2509</td></tr>
 <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>2616</td></tr>
+<td>2615</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>2630</td></tr>
+<td>2629</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>2632</td></tr>
+<td>2631</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>2719</td></tr>
+<td>2718</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>2724</td></tr>
+<td>2723</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>3039</td></tr>
+<td>3038</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3040</td></tr>
+<td>3039</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>3077</td></tr>
+<td>3076</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 5, expected level should be 4.</td>
-<td>3082</td></tr>
+<td>3081</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'synchronized' has incorrect indentation level 5, expected level should be 4.</td>
-<td>3083</td></tr>
+<td>3082</td></tr>
 <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 7, expected level should be 6.</td>
-<td>3084</td></tr>
+<td>3083</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' child has incorrect indentation level 9, expected level should be 8.</td>
-<td>3085</td></tr>
+<td>3084</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 9, expected level should be 8.</td>
-<td>3086</td></tr>
+<td>3085</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 11, expected level should be 10.</td>
-<td>3087</td></tr>
+<td>3086</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 9, expected level should be 8.</td>
-<td>3088</td></tr>
+<td>3087</td></tr>
 <tr class="b">
 <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 7, expected level should be 6.</td>
-<td>3089</td></tr>
+<td>3088</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'synchronized rcurly' has incorrect indentation level 5, expected level should be 4.</td>
-<td>3090</td></tr>
+<td>3089</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 5, expected level should be 4.</td>
-<td>3091</td></tr>
+<td>3090</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 3, expected level should be 2.</td>
-<td>3092</td></tr>
+<td>3091</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>3243</td></tr>
+<td>3242</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3276</td></tr>
+<td>3275</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>3303</td></tr>
+<td>3302</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3317</td></tr>
+<td>3316</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>3425</td></tr>
+<td>3424</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'ctor def rcurly' has incorrect indentation level 5, expected level should be 4.</td>
-<td>3447</td></tr>
+<td>3446</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be 4.</td>
-<td>3519</td></tr>
+<td>3518</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 48 should have line break after.</td>
-<td>3540</td></tr>
+<td>3539</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 46 should have line break after.</td>
-<td>3541</td></tr>
+<td>3540</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
-<td>3588</td></tr>
+<td>3587</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>3608</td></tr>
+<td>3607</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
-<td>3610</td></tr>
+<td>3609</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 12, expected level should be one of the following: 14, 16.</td>
-<td>3611</td></tr>
+<td>3610</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
-<td>3612</td></tr>
+<td>3611</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>3613</td></tr>
+<td>3612</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>3614</td></tr></table></div>
+<td>3613</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine.java">org/apache/hadoop/hbase/regionserver/HRegionServerCommandLine.java</h3>
 <table border="0" class="table table-striped">
@@ -117285,7 +117285,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index 7beef87..da29322 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -25,7 +25,7 @@ under the License.
     <language>en-us</language>
     <copyright>&#169;2007 - 2018 The Apache Software Foundation</copyright>
     <item>
-      <title>File: 3808,
+      <title>File: 3809,
              Errors: 15080,
              Warnings: 0,
              Infos: 0
@@ -50992,6 +50992,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestMasterNotCarryTable.java">org/apache/hadoop/hbase/master/TestMasterNotCarryTable.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.client.AdvancedScanResultConsumer.java">org/apache/hadoop/hbase/client/AdvancedScanResultConsumer.java</a>
                 </td>
                 <td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index 57e3442..36e21a0 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 4a55bc6..59a41a6 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 96d0b40..f31d219 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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" />
@@ -889,7 +889,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 2cdc4b6..90fd12e 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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" />
@@ -1015,7 +1015,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index e161f56..29def0d 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3824,7 +3824,7 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Tue Oct 30 14:45:37 UTC 2018"</code></td>
+<td class="colLast"><code>"Thu Nov  1 14:45:06 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>"342536f8882440a77775ed3eaa89894b"</code></td>
+<td class="colLast"><code>"84371b476c7f3a2afe7b0844f6a3493f"</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/0f0847e0/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 f55f5e6..155a44c 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/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/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 61680f8..3281526 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -555,24 +555,24 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/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/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/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/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/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/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/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/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/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/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/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/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/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/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/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/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/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/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/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
 </ul>
 </li>
 </ul>


[14/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/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 6591d6c..b31c78e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
@@ -923,3042 +923,3045 @@
 <span class="sourceLineNo">915</span><a name="line.915"></a>
 <span class="sourceLineNo">916</span>    this.masterActiveTime = System.currentTimeMillis();<a name="line.916"></a>
 <span class="sourceLineNo">917</span>    // TODO: Do this using Dependency Injection, using PicoContainer, Guice or Spring.<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    // Initialize the chunkCreator<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    initializeMemStoreChunkCreator();<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.920"></a>
-<span class="sourceLineNo">921</span>    this.walManager = new MasterWalManager(this);<a name="line.921"></a>
-<span class="sourceLineNo">922</span><a name="line.922"></a>
-<span class="sourceLineNo">923</span>    // enable table descriptors cache<a name="line.923"></a>
-<span class="sourceLineNo">924</span>    this.tableDescriptors.setCacheOn();<a name="line.924"></a>
+<span class="sourceLineNo">918</span><a name="line.918"></a>
+<span class="sourceLineNo">919</span>    // Only initialize the MemStoreLAB when master carry table<a name="line.919"></a>
+<span class="sourceLineNo">920</span>    if (LoadBalancer.isTablesOnMaster(conf)) {<a name="line.920"></a>
+<span class="sourceLineNo">921</span>      initializeMemStoreChunkCreator();<a name="line.921"></a>
+<span class="sourceLineNo">922</span>    }<a name="line.922"></a>
+<span class="sourceLineNo">923</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.923"></a>
+<span class="sourceLineNo">924</span>    this.walManager = new MasterWalManager(this);<a name="line.924"></a>
 <span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>    // warm-up HTDs cache on master initialization<a name="line.926"></a>
-<span class="sourceLineNo">927</span>    if (preLoadTableDescriptors) {<a name="line.927"></a>
-<span class="sourceLineNo">928</span>      status.setStatus("Pre-loading table descriptors");<a name="line.928"></a>
-<span class="sourceLineNo">929</span>      this.tableDescriptors.getAll();<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>    // Publish cluster ID; set it in Master too. The superclass RegionServer does this later but<a name="line.932"></a>
-<span class="sourceLineNo">933</span>    // only after it has checked in with the Master. At least a few tests ask Master for clusterId<a name="line.933"></a>
-<span class="sourceLineNo">934</span>    // before it has called its run method and before RegionServer has done the reportForDuty.<a name="line.934"></a>
-<span class="sourceLineNo">935</span>    ClusterId clusterId = fileSystemManager.getClusterId();<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    status.setStatus("Publishing Cluster ID " + clusterId + " in ZooKeeper");<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.937"></a>
-<span class="sourceLineNo">938</span>    this.clusterId = clusterId.toString();<a name="line.938"></a>
-<span class="sourceLineNo">939</span><a name="line.939"></a>
-<span class="sourceLineNo">940</span>    // Precaution. Put in place the old hbck1 lock file to fence out old hbase1s running their<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    // hbck1s against an hbase2 cluster; it could do damage. To skip this behavior, set<a name="line.941"></a>
-<span class="sourceLineNo">942</span>    // hbase.write.hbck1.lock.file to false.<a name="line.942"></a>
-<span class="sourceLineNo">943</span>    if (this.conf.getBoolean("hbase.write.hbck1.lock.file", true)) {<a name="line.943"></a>
-<span class="sourceLineNo">944</span>      HBaseFsck.checkAndMarkRunningHbck(this.conf,<a name="line.944"></a>
-<span class="sourceLineNo">945</span>          HBaseFsck.createLockRetryCounterFactory(this.conf).create());<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    }<a name="line.946"></a>
-<span class="sourceLineNo">947</span><a name="line.947"></a>
-<span class="sourceLineNo">948</span>    status.setStatus("Initialize ServerManager and schedule SCP for crash servers");<a name="line.948"></a>
-<span class="sourceLineNo">949</span>    this.serverManager = createServerManager(this);<a name="line.949"></a>
-<span class="sourceLineNo">950</span>    createProcedureExecutor();<a name="line.950"></a>
-<span class="sourceLineNo">951</span>    @SuppressWarnings("rawtypes")<a name="line.951"></a>
-<span class="sourceLineNo">952</span>    Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType =<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      procedureExecutor.getActiveProceduresNoCopy().stream()<a name="line.953"></a>
-<span class="sourceLineNo">954</span>        .collect(Collectors.groupingBy(p -&gt; p.getClass()));<a name="line.954"></a>
-<span class="sourceLineNo">955</span><a name="line.955"></a>
-<span class="sourceLineNo">956</span>    checkUnsupportedProcedure(procsByType);<a name="line.956"></a>
-<span class="sourceLineNo">957</span><a name="line.957"></a>
-<span class="sourceLineNo">958</span>    // Create Assignment Manager<a name="line.958"></a>
-<span class="sourceLineNo">959</span>    this.assignmentManager = createAssignmentManager(this);<a name="line.959"></a>
-<span class="sourceLineNo">960</span>    this.assignmentManager.start();<a name="line.960"></a>
-<span class="sourceLineNo">961</span>    // TODO: TRSP can perform as the sub procedure for other procedures, so even if it is marked as<a name="line.961"></a>
-<span class="sourceLineNo">962</span>    // completed, it could still be in the procedure list. This is a bit strange but is another<a name="line.962"></a>
-<span class="sourceLineNo">963</span>    // story, need to verify the implementation for ProcedureExecutor and ProcedureStore.<a name="line.963"></a>
-<span class="sourceLineNo">964</span>    List&lt;TransitRegionStateProcedure&gt; ritList =<a name="line.964"></a>
-<span class="sourceLineNo">965</span>      procsByType.getOrDefault(TransitRegionStateProcedure.class, Collections.emptyList()).stream()<a name="line.965"></a>
-<span class="sourceLineNo">966</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p)<a name="line.966"></a>
-<span class="sourceLineNo">967</span>        .collect(Collectors.toList());<a name="line.967"></a>
-<span class="sourceLineNo">968</span>    this.assignmentManager.setupRIT(ritList);<a name="line.968"></a>
-<span class="sourceLineNo">969</span><a name="line.969"></a>
-<span class="sourceLineNo">970</span>    // Start RegionServerTracker with listing of servers found with exiting SCPs -- these should<a name="line.970"></a>
-<span class="sourceLineNo">971</span>    // be registered in the deadServers set -- and with the list of servernames out on the<a name="line.971"></a>
-<span class="sourceLineNo">972</span>    // filesystem that COULD BE 'alive' (we'll schedule SCPs for each and let SCP figure it out).<a name="line.972"></a>
-<span class="sourceLineNo">973</span>    // We also pass dirs that are already 'splitting'... so we can do some checks down in tracker.<a name="line.973"></a>
-<span class="sourceLineNo">974</span>    // TODO: Generate the splitting and live Set in one pass instead of two as we currently do.<a name="line.974"></a>
-<span class="sourceLineNo">975</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.975"></a>
-<span class="sourceLineNo">976</span>    this.regionServerTracker.start(<a name="line.976"></a>
-<span class="sourceLineNo">977</span>      procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.977"></a>
-<span class="sourceLineNo">978</span>        .map(p -&gt; (ServerCrashProcedure) p).map(p -&gt; p.getServerName()).collect(Collectors.toSet()),<a name="line.978"></a>
-<span class="sourceLineNo">979</span>      walManager.getLiveServersFromWALDir(), walManager.getSplittingServersFromWALDir());<a name="line.979"></a>
-<span class="sourceLineNo">980</span>    // This manager will be started AFTER hbase:meta is confirmed on line.<a name="line.980"></a>
-<span class="sourceLineNo">981</span>    // hbase.mirror.table.state.to.zookeeper is so hbase1 clients can connect. They read table<a name="line.981"></a>
-<span class="sourceLineNo">982</span>    // state from zookeeper while hbase2 reads it from hbase:meta. Disable if no hbase1 clients.<a name="line.982"></a>
-<span class="sourceLineNo">983</span>    this.tableStateManager =<a name="line.983"></a>
-<span class="sourceLineNo">984</span>      this.conf.getBoolean(MirroringTableStateManager.MIRROR_TABLE_STATE_TO_ZK_KEY, true)<a name="line.984"></a>
-<span class="sourceLineNo">985</span>        ?<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        new MirroringTableStateManager(this):<a name="line.986"></a>
-<span class="sourceLineNo">987</span>        new TableStateManager(this);<a name="line.987"></a>
-<span class="sourceLineNo">988</span><a name="line.988"></a>
-<span class="sourceLineNo">989</span>    status.setStatus("Initializing ZK system trackers");<a name="line.989"></a>
-<span class="sourceLineNo">990</span>    initializeZKBasedSystemTrackers();<a name="line.990"></a>
-<span class="sourceLineNo">991</span>    status.setStatus("Loading last flushed sequence id of regions");<a name="line.991"></a>
-<span class="sourceLineNo">992</span>    try {<a name="line.992"></a>
-<span class="sourceLineNo">993</span>      this.serverManager.loadLastFlushedSequenceIds();<a name="line.993"></a>
-<span class="sourceLineNo">994</span>    } catch (IOException e) {<a name="line.994"></a>
-<span class="sourceLineNo">995</span>      LOG.debug("Failed to load last flushed sequence id of regions"<a name="line.995"></a>
-<span class="sourceLineNo">996</span>          + " from file system", e);<a name="line.996"></a>
-<span class="sourceLineNo">997</span>    }<a name="line.997"></a>
-<span class="sourceLineNo">998</span>    // Set ourselves as active Master now our claim has succeeded up in zk.<a name="line.998"></a>
-<span class="sourceLineNo">999</span>    this.activeMaster = true;<a name="line.999"></a>
-<span class="sourceLineNo">1000</span><a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>    // This is for backwards compatibility<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>    // See HBASE-11393<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>    ReplicationPeerConfigUpgrader tableCFsUpdater =<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>        new ReplicationPeerConfigUpgrader(zooKeeper, conf);<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>    tableCFsUpdater.copyTableCFs();<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span><a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>    if (!maintenanceMode) {<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>      // Add the Observer to delete quotas on table deletion before starting all CPs by<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>      // default with quota support, avoiding if user specifically asks to not load this Observer.<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>      if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>        updateConfigurationForQuotasObserver(conf);<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>      }<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      // initialize master side coprocessors before we start handling requests<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>      status.setStatus("Initializing master coprocessors");<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>      this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>    }<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span><a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>    // Checking if meta needs initializing.<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    status.setStatus("Initializing meta table if this is a new deploy");<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>    InitMetaProcedure initMetaProc = null;<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>    // Print out state of hbase:meta on startup; helps debugging.<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>    RegionState rs = this.assignmentManager.getRegionStates().<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>        getRegionState(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>    LOG.info("hbase:meta {}", rs);<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>    if (rs.isOffline()) {<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>      Optional&lt;InitMetaProcedure&gt; optProc = procedureExecutor.getProcedures().stream()<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>        .filter(p -&gt; p instanceof InitMetaProcedure).map(o -&gt; (InitMetaProcedure) o).findAny();<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>      initMetaProc = optProc.orElseGet(() -&gt; {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>        // schedule an init meta procedure if meta has not been deployed yet<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>        InitMetaProcedure temp = new InitMetaProcedure();<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>        procedureExecutor.submitProcedure(temp);<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        return temp;<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      });<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>    }<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>    if (this.balancer instanceof FavoredNodesPromoter) {<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>      favoredNodesManager = new FavoredNodesManager(this);<a name="line.1037"></a>
+<span class="sourceLineNo">926</span>    // enable table descriptors cache<a name="line.926"></a>
+<span class="sourceLineNo">927</span>    this.tableDescriptors.setCacheOn();<a name="line.927"></a>
+<span class="sourceLineNo">928</span><a name="line.928"></a>
+<span class="sourceLineNo">929</span>    // warm-up HTDs cache on master initialization<a name="line.929"></a>
+<span class="sourceLineNo">930</span>    if (preLoadTableDescriptors) {<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      status.setStatus("Pre-loading table descriptors");<a name="line.931"></a>
+<span class="sourceLineNo">932</span>      this.tableDescriptors.getAll();<a name="line.932"></a>
+<span class="sourceLineNo">933</span>    }<a name="line.933"></a>
+<span class="sourceLineNo">934</span><a name="line.934"></a>
+<span class="sourceLineNo">935</span>    // Publish cluster ID; set it in Master too. The superclass RegionServer does this later but<a name="line.935"></a>
+<span class="sourceLineNo">936</span>    // only after it has checked in with the Master. At least a few tests ask Master for clusterId<a name="line.936"></a>
+<span class="sourceLineNo">937</span>    // before it has called its run method and before RegionServer has done the reportForDuty.<a name="line.937"></a>
+<span class="sourceLineNo">938</span>    ClusterId clusterId = fileSystemManager.getClusterId();<a name="line.938"></a>
+<span class="sourceLineNo">939</span>    status.setStatus("Publishing Cluster ID " + clusterId + " in ZooKeeper");<a name="line.939"></a>
+<span class="sourceLineNo">940</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.940"></a>
+<span class="sourceLineNo">941</span>    this.clusterId = clusterId.toString();<a name="line.941"></a>
+<span class="sourceLineNo">942</span><a name="line.942"></a>
+<span class="sourceLineNo">943</span>    // Precaution. Put in place the old hbck1 lock file to fence out old hbase1s running their<a name="line.943"></a>
+<span class="sourceLineNo">944</span>    // hbck1s against an hbase2 cluster; it could do damage. To skip this behavior, set<a name="line.944"></a>
+<span class="sourceLineNo">945</span>    // hbase.write.hbck1.lock.file to false.<a name="line.945"></a>
+<span class="sourceLineNo">946</span>    if (this.conf.getBoolean("hbase.write.hbck1.lock.file", true)) {<a name="line.946"></a>
+<span class="sourceLineNo">947</span>      HBaseFsck.checkAndMarkRunningHbck(this.conf,<a name="line.947"></a>
+<span class="sourceLineNo">948</span>          HBaseFsck.createLockRetryCounterFactory(this.conf).create());<a name="line.948"></a>
+<span class="sourceLineNo">949</span>    }<a name="line.949"></a>
+<span class="sourceLineNo">950</span><a name="line.950"></a>
+<span class="sourceLineNo">951</span>    status.setStatus("Initialize ServerManager and schedule SCP for crash servers");<a name="line.951"></a>
+<span class="sourceLineNo">952</span>    this.serverManager = createServerManager(this);<a name="line.952"></a>
+<span class="sourceLineNo">953</span>    createProcedureExecutor();<a name="line.953"></a>
+<span class="sourceLineNo">954</span>    @SuppressWarnings("rawtypes")<a name="line.954"></a>
+<span class="sourceLineNo">955</span>    Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType =<a name="line.955"></a>
+<span class="sourceLineNo">956</span>      procedureExecutor.getActiveProceduresNoCopy().stream()<a name="line.956"></a>
+<span class="sourceLineNo">957</span>        .collect(Collectors.groupingBy(p -&gt; p.getClass()));<a name="line.957"></a>
+<span class="sourceLineNo">958</span><a name="line.958"></a>
+<span class="sourceLineNo">959</span>    checkUnsupportedProcedure(procsByType);<a name="line.959"></a>
+<span class="sourceLineNo">960</span><a name="line.960"></a>
+<span class="sourceLineNo">961</span>    // Create Assignment Manager<a name="line.961"></a>
+<span class="sourceLineNo">962</span>    this.assignmentManager = createAssignmentManager(this);<a name="line.962"></a>
+<span class="sourceLineNo">963</span>    this.assignmentManager.start();<a name="line.963"></a>
+<span class="sourceLineNo">964</span>    // TODO: TRSP can perform as the sub procedure for other procedures, so even if it is marked as<a name="line.964"></a>
+<span class="sourceLineNo">965</span>    // completed, it could still be in the procedure list. This is a bit strange but is another<a name="line.965"></a>
+<span class="sourceLineNo">966</span>    // story, need to verify the implementation for ProcedureExecutor and ProcedureStore.<a name="line.966"></a>
+<span class="sourceLineNo">967</span>    List&lt;TransitRegionStateProcedure&gt; ritList =<a name="line.967"></a>
+<span class="sourceLineNo">968</span>      procsByType.getOrDefault(TransitRegionStateProcedure.class, Collections.emptyList()).stream()<a name="line.968"></a>
+<span class="sourceLineNo">969</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p)<a name="line.969"></a>
+<span class="sourceLineNo">970</span>        .collect(Collectors.toList());<a name="line.970"></a>
+<span class="sourceLineNo">971</span>    this.assignmentManager.setupRIT(ritList);<a name="line.971"></a>
+<span class="sourceLineNo">972</span><a name="line.972"></a>
+<span class="sourceLineNo">973</span>    // Start RegionServerTracker with listing of servers found with exiting SCPs -- these should<a name="line.973"></a>
+<span class="sourceLineNo">974</span>    // be registered in the deadServers set -- and with the list of servernames out on the<a name="line.974"></a>
+<span class="sourceLineNo">975</span>    // filesystem that COULD BE 'alive' (we'll schedule SCPs for each and let SCP figure it out).<a name="line.975"></a>
+<span class="sourceLineNo">976</span>    // We also pass dirs that are already 'splitting'... so we can do some checks down in tracker.<a name="line.976"></a>
+<span class="sourceLineNo">977</span>    // TODO: Generate the splitting and live Set in one pass instead of two as we currently do.<a name="line.977"></a>
+<span class="sourceLineNo">978</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.978"></a>
+<span class="sourceLineNo">979</span>    this.regionServerTracker.start(<a name="line.979"></a>
+<span class="sourceLineNo">980</span>      procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.980"></a>
+<span class="sourceLineNo">981</span>        .map(p -&gt; (ServerCrashProcedure) p).map(p -&gt; p.getServerName()).collect(Collectors.toSet()),<a name="line.981"></a>
+<span class="sourceLineNo">982</span>      walManager.getLiveServersFromWALDir(), walManager.getSplittingServersFromWALDir());<a name="line.982"></a>
+<span class="sourceLineNo">983</span>    // This manager will be started AFTER hbase:meta is confirmed on line.<a name="line.983"></a>
+<span class="sourceLineNo">984</span>    // hbase.mirror.table.state.to.zookeeper is so hbase1 clients can connect. They read table<a name="line.984"></a>
+<span class="sourceLineNo">985</span>    // state from zookeeper while hbase2 reads it from hbase:meta. Disable if no hbase1 clients.<a name="line.985"></a>
+<span class="sourceLineNo">986</span>    this.tableStateManager =<a name="line.986"></a>
+<span class="sourceLineNo">987</span>      this.conf.getBoolean(MirroringTableStateManager.MIRROR_TABLE_STATE_TO_ZK_KEY, true)<a name="line.987"></a>
+<span class="sourceLineNo">988</span>        ?<a name="line.988"></a>
+<span class="sourceLineNo">989</span>        new MirroringTableStateManager(this):<a name="line.989"></a>
+<span class="sourceLineNo">990</span>        new TableStateManager(this);<a name="line.990"></a>
+<span class="sourceLineNo">991</span><a name="line.991"></a>
+<span class="sourceLineNo">992</span>    status.setStatus("Initializing ZK system trackers");<a name="line.992"></a>
+<span class="sourceLineNo">993</span>    initializeZKBasedSystemTrackers();<a name="line.993"></a>
+<span class="sourceLineNo">994</span>    status.setStatus("Loading last flushed sequence id of regions");<a name="line.994"></a>
+<span class="sourceLineNo">995</span>    try {<a name="line.995"></a>
+<span class="sourceLineNo">996</span>      this.serverManager.loadLastFlushedSequenceIds();<a name="line.996"></a>
+<span class="sourceLineNo">997</span>    } catch (IOException e) {<a name="line.997"></a>
+<span class="sourceLineNo">998</span>      LOG.debug("Failed to load last flushed sequence id of regions"<a name="line.998"></a>
+<span class="sourceLineNo">999</span>          + " from file system", e);<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>    }<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>    // Set ourselves as active Master now our claim has succeeded up in zk.<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>    this.activeMaster = true;<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span><a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>    // This is for backwards compatibility<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>    // See HBASE-11393<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>    ReplicationPeerConfigUpgrader tableCFsUpdater =<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>        new ReplicationPeerConfigUpgrader(zooKeeper, conf);<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>    tableCFsUpdater.copyTableCFs();<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span><a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>    if (!maintenanceMode) {<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>      // Add the Observer to delete quotas on table deletion before starting all CPs by<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>      // default with quota support, avoiding if user specifically asks to not load this Observer.<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>      if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>        updateConfigurationForQuotasObserver(conf);<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>      }<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>      // initialize master side coprocessors before we start handling requests<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>      status.setStatus("Initializing master coprocessors");<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>      this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>    }<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span><a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>    // Checking if meta needs initializing.<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>    status.setStatus("Initializing meta table if this is a new deploy");<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>    InitMetaProcedure initMetaProc = null;<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>    // Print out state of hbase:meta on startup; helps debugging.<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>    RegionState rs = this.assignmentManager.getRegionStates().<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>        getRegionState(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>    LOG.info("hbase:meta {}", rs);<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>    if (rs.isOffline()) {<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>      Optional&lt;InitMetaProcedure&gt; optProc = procedureExecutor.getProcedures().stream()<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>        .filter(p -&gt; p instanceof InitMetaProcedure).map(o -&gt; (InitMetaProcedure) o).findAny();<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      initMetaProc = optProc.orElseGet(() -&gt; {<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>        // schedule an init meta procedure if meta has not been deployed yet<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>        InitMetaProcedure temp = new InitMetaProcedure();<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>        procedureExecutor.submitProcedure(temp);<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>        return temp;<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>      });<a name="line.1037"></a>
 <span class="sourceLineNo">1038</span>    }<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span><a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>    // initialize load balancer<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>    this.balancer.setMasterServices(this);<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>    this.balancer.initialize();<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span><a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    // start up all service threads.<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    status.setStatus("Initializing master service threads");<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>    startServiceThreads();<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>    // wait meta to be initialized after we start procedure executor<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    if (initMetaProc != null) {<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>      initMetaProc.await();<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>    }<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    // Wake up this server to check in<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    sleeper.skipSleepCycle();<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span><a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    // Wait for region servers to report in.<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>    // With this as part of master initialization, it precludes our being able to start a single<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    // server that is both Master and RegionServer. Needs more thought. TODO.<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    String statusStr = "Wait for region servers to report in";<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    status.setStatus(statusStr);<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>    LOG.info(Objects.toString(status));<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>    waitForRegionServers(status);<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span><a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>    // Check if master is shutting down because issue initializing regionservers or balancer.<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    if (isStopped()) {<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>      return;<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    }<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span><a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    status.setStatus("Starting assignment manager");<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>    // FIRST HBASE:META READ!!!!<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    // The below cannot make progress w/o hbase:meta being online.<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    // This is the FIRST attempt at going to hbase:meta. Meta on-lining is going on in background<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    // as procedures run -- in particular SCPs for crashed servers... One should put up hbase:meta<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    // if it is down. It may take a while to come online. So, wait here until meta if for sure<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    // available. That's what waitForMetaOnline does.<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    if (!waitForMetaOnline()) {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>      return;<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    }<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>    this.assignmentManager.joinCluster();<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    // The below depends on hbase:meta being online.<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    this.tableStateManager.start();<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>    // Initialize after meta is up as below scans meta<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    if (favoredNodesManager != null &amp;&amp; !maintenanceMode) {<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>      SnapshotOfRegionAssignmentFromMeta snapshotOfRegionAssignment =<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>          new SnapshotOfRegionAssignmentFromMeta(getConnection());<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>      snapshotOfRegionAssignment.initialize();<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>      favoredNodesManager.initialize(snapshotOfRegionAssignment);<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>    }<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span><a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    // set cluster status again after user regions are assigned<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1090"></a>
+<span class="sourceLineNo">1039</span>    if (this.balancer instanceof FavoredNodesPromoter) {<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>      favoredNodesManager = new FavoredNodesManager(this);<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>    }<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span><a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>    // initialize load balancer<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>    this.balancer.setMasterServices(this);<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>    this.balancer.initialize();<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span><a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>    // start up all service threads.<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>    status.setStatus("Initializing master service threads");<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>    startServiceThreads();<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>    // wait meta to be initialized after we start procedure executor<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>    if (initMetaProc != null) {<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>      initMetaProc.await();<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>    }<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>    // Wake up this server to check in<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>    sleeper.skipSleepCycle();<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span><a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>    // Wait for region servers to report in.<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>    // With this as part of master initialization, it precludes our being able to start a single<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>    // server that is both Master and RegionServer. Needs more thought. TODO.<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    String statusStr = "Wait for region servers to report in";<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>    status.setStatus(statusStr);<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>    LOG.info(Objects.toString(status));<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>    waitForRegionServers(status);<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span><a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    // Check if master is shutting down because issue initializing regionservers or balancer.<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>    if (isStopped()) {<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>      return;<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>    }<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span><a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>    status.setStatus("Starting assignment manager");<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>    // FIRST HBASE:META READ!!!!<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>    // The below cannot make progress w/o hbase:meta being online.<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    // This is the FIRST attempt at going to hbase:meta. Meta on-lining is going on in background<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    // as procedures run -- in particular SCPs for crashed servers... One should put up hbase:meta<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    // if it is down. It may take a while to come online. So, wait here until meta if for sure<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    // available. That's what waitForMetaOnline does.<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>    if (!waitForMetaOnline()) {<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      return;<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>    }<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>    this.assignmentManager.joinCluster();<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>    // The below depends on hbase:meta being online.<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>    this.tableStateManager.start();<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>    // Initialize after meta is up as below scans meta<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    if (favoredNodesManager != null &amp;&amp; !maintenanceMode) {<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>      SnapshotOfRegionAssignmentFromMeta snapshotOfRegionAssignment =<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>          new SnapshotOfRegionAssignmentFromMeta(getConnection());<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      snapshotOfRegionAssignment.initialize();<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>      favoredNodesManager.initialize(snapshotOfRegionAssignment);<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>    }<a name="line.1090"></a>
 <span class="sourceLineNo">1091</span><a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>    this.balancerChore = new BalancerChore(this);<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>    getChoreService().scheduleChore(balancerChore);<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>    this.catalogJanitorChore = new CatalogJanitor(this);<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    this.serverManager.startChore();<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span><a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>    // NAMESPACE READ!!!!<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    // Here we expect hbase:namespace to be online. See inside initClusterSchemaService.<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    // TODO: Fix this. Namespace is a pain being a sort-of system table. Fold it in to hbase:meta.<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    // isNamespace does like isMeta and waits until namespace is onlined before allowing progress.<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    if (!waitForNamespaceOnline()) {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      return;<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    }<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>    status.setStatus("Starting cluster schema service");<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>    initClusterSchemaService();<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span><a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>    if (this.cpHost != null) {<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>      try {<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>        this.cpHost.preMasterInitialization();<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>      } catch (IOException e) {<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<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><a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>    status.markComplete("Initialization successful");<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    LOG.info(String.format("Master has completed initialization %.3fsec",<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>       (System.currentTimeMillis() - masterActiveTime) / 1000.0f));<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    this.masterFinishedInitializationTime = System.currentTimeMillis();<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>    configurationManager.registerObserver(this.balancer);<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    configurationManager.registerObserver(this.hfileCleaner);<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>    configurationManager.registerObserver(this.logCleaner);<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    // Set master as 'initialized'.<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>    setInitialized(true);<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span><a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    if (maintenanceMode) {<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>      LOG.info("Detected repair mode, skipping final initialization steps.");<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>      return;<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>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>    status.setStatus("Assign meta replicas");<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap();<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>    metaBootstrap.assignMetaReplicas();<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>    status.setStatus("Starting quota manager");<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>    initQuotaManager();<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>      // Create the quota snapshot notifier<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>      spaceQuotaSnapshotNotifier = createQuotaSnapshotNotifier();<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>      spaceQuotaSnapshotNotifier.initialize(getClusterConnection());<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>      this.quotaObserverChore = new QuotaObserverChore(this, getMasterMetrics());<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>      // Start the chore to read the region FS space reports and act on them<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>      getChoreService().scheduleChore(quotaObserverChore);<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span><a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>      this.snapshotQuotaChore = new SnapshotQuotaObserverChore(this, getMasterMetrics());<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>      // Start the chore to read snapshots and add their usage to table/NS quotas<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>      getChoreService().scheduleChore(snapshotQuotaChore);<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>    // clear the dead servers with same host name and port of online server because we are not<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    // removing dead server with same hostname and port of rs which is trying to check in before<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>    // master initialization. See HBASE-5916.<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    this.serverManager.clearDeadServersWithSameHostNameAndPortOfOnlineServer();<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span><a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    // Check and set the znode ACLs if needed in case we are overtaking a non-secure configuration<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>    status.setStatus("Checking ZNode ACLs");<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>    zooKeeper.checkAndSetZNodeAcls();<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span><a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    status.setStatus("Initializing MOB Cleaner");<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>    initMobCleaner();<a name="line.1166"></a>
+<span class="sourceLineNo">1092</span>    // set cluster status again after user regions are assigned<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span><a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>    this.balancerChore = new BalancerChore(this);<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>    getChoreService().scheduleChore(balancerChore);<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>    this.catalogJanitorChore = new CatalogJanitor(this);<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>    this.serverManager.startChore();<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span><a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>    // NAMESPACE READ!!!!<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    // Here we expect hbase:namespace to be online. See inside initClusterSchemaService.<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>    // TODO: Fix this. Namespace is a pain being a sort-of system table. Fold it in to hbase:meta.<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>    // isNamespace does like isMeta and waits until namespace is onlined before allowing progress.<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>    if (!waitForNamespaceOnline()) {<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>      return;<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>    }<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>    status.setStatus("Starting cluster schema service");<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>    initClusterSchemaService();<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span><a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>    if (this.cpHost != null) {<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>      try {<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>        this.cpHost.preMasterInitialization();<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>      } catch (IOException e) {<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<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><a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>    status.markComplete("Initialization successful");<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>    LOG.info(String.format("Master has completed initialization %.3fsec",<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>       (System.currentTimeMillis() - masterActiveTime) / 1000.0f));<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    this.masterFinishedInitializationTime = System.currentTimeMillis();<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>    configurationManager.registerObserver(this.balancer);<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>    configurationManager.registerObserver(this.hfileCleaner);<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    configurationManager.registerObserver(this.logCleaner);<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>    // Set master as 'initialized'.<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    setInitialized(true);<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span><a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>    if (maintenanceMode) {<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>      LOG.info("Detected repair mode, skipping final initialization steps.");<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>      return;<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>    }<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span><a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>    status.setStatus("Assign meta replicas");<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap();<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>    metaBootstrap.assignMetaReplicas();<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>    status.setStatus("Starting quota manager");<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>    initQuotaManager();<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>      // Create the quota snapshot notifier<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>      spaceQuotaSnapshotNotifier = createQuotaSnapshotNotifier();<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>      spaceQuotaSnapshotNotifier.initialize(getClusterConnection());<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>      this.quotaObserverChore = new QuotaObserverChore(this, getMasterMetrics());<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>      // Start the chore to read the region FS space reports and act on them<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>      getChoreService().scheduleChore(quotaObserverChore);<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span><a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>      this.snapshotQuotaChore = new SnapshotQuotaObserverChore(this, getMasterMetrics());<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>      // Start the chore to read snapshots and add their usage to table/NS quotas<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>      getChoreService().scheduleChore(snapshotQuotaChore);<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>    }<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span><a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>    // clear the dead servers with same host name and port of online server because we are not<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>    // removing dead server with same hostname and port of rs which is trying to check in before<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>    // master initialization. See HBASE-5916.<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>    this.serverManager.clearDeadServersWithSameHostNameAndPortOfOnlineServer();<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span><a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>    // Check and set the znode ACLs if needed in case we are overtaking a non-secure configuration<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>    status.setStatus("Checking ZNode ACLs");<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>    zooKeeper.checkAndSetZNodeAcls();<a name="line.1166"></a>
 <span class="sourceLineNo">1167</span><a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>    status.setStatus("Calling postStartMaster coprocessors");<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    if (this.cpHost != null) {<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>      // don't let cp initialization errors kill the master<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>      try {<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>        this.cpHost.postStartMaster();<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>      } catch (IOException ioe) {<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>        LOG.error("Coprocessor postStartMaster() hook failed", ioe);<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>      }<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>    }<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span><a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>    zombieDetector.interrupt();<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span><a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>    /*<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>     * After master has started up, lets do balancer post startup initialization. Since this runs<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>     * in activeMasterManager thread, it should be fine.<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>     */<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>    long start = System.currentTimeMillis();<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    this.balancer.postMasterStartupInitialize();<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    if (LOG.isDebugEnabled()) {<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>      LOG.debug("Balancer post startup initialization complete, took " + (<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>          (System.currentTimeMillis() - start) / 1000) + " seconds");<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>   * Check hbase:meta is up and ready for reading. For use during Master startup only.<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>   * @return True if meta is UP and online and startup can progress. Otherwise, meta is not online<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>   *   and we will hold here until operator intervention.<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>   */<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>  @VisibleForTesting<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>  public boolean waitForMetaOnline() throws InterruptedException {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>    return isRegionOnline(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>  }<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>   * @return True if region is online and scannable else false if an error or shutdown (Otherwise<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>   *   we just block in here holding up all forward-progess).<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>   */<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>  private boolean isRegionOnline(RegionInfo ri) throws InterruptedException {<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>    RetryCounter rc = null;<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>    while (!isStopped()) {<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>      RegionState rs = this.assignmentManager.getRegionStates().getRegionState(ri);<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>      if (rs.isOpened()) {<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>        if (this.getServerManager().isServerOnline(rs.getServerName())) {<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>          return true;<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>        }<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>      }<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>      // Region is not OPEN.<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>      Optional&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; optProc = this.procedureExecutor.getProcedures().<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>          stream().filter(p -&gt; p instanceof ServerCrashProcedure).findAny();<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      // TODO: Add a page to refguide on how to do repair. Have this log message point to it.<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>      // Page will talk about loss of edits, how to schedule at least the meta WAL recovery, and<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>      // then how to assign including how to break region lock if one held.<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>      LOG.warn("{} is NOT online; state={}; ServerCrashProcedures={}. Master startup cannot " +<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>          "progress, in holding-pattern until region onlined.",<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>          ri.getRegionNameAsString(), rs, optProc.isPresent());<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>      // Check once-a-minute.<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>      if (rc == null) {<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>        rc = new RetryCounterFactory(1000).create();<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>      }<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>      Threads.sleep(rc.getBackoffTimeAndIncrementAttempts());<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>    }<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>    return false;<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>   * Check hbase:namespace table is assigned. If not, startup will hang looking for the ns table<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>   * (TODO: Fix this! NS should not hold-up startup).<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>   * @return True if namespace table is up/online.<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>   */<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>  @VisibleForTesting<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>  public boolean waitForNamespaceOnline() throws InterruptedException {<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>    List&lt;RegionInfo&gt; ris = this.assignmentManager.getRegionStates().<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>        getRegionsOfTable(TableName.NAMESPACE_TABLE_NAME);<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>    if (ris.isEmpty()) {<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>      // If empty, means we've not assigned the namespace table yet... Just return true so startup<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>      // continues and the namespace table gets created.<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>      return true;<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>    }<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>    // Else there are namespace regions up in meta. Ensure they are assigned before we go on.<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>    for (RegionInfo ri: ris) {<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>      isRegionOnline(ri);<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>    }<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>    return true;<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>  }<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span><a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>  /**<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>   * Adds the {@code MasterQuotasObserver} to the list of configured Master observers to<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>   * automatically remove quotas for a table when that table is deleted.<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>   */<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>  @VisibleForTesting<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>  public void updateConfigurationForQuotasObserver(Configuration conf) {<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>    // We're configured to not delete quotas on table deletion, so we don't need to add the obs.<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>    if (!conf.getBoolean(<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>          MasterQuotasObserver.REMOVE_QUOTA_ON_TABLE_DELETE,<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>          MasterQuotasObserver.REMOVE_QUOTA_ON_TABLE_DELETE_DEFAULT)) {<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>      return;<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>    }<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>    String[] masterCoprocs = conf.getStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY);<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>    final int length = null == masterCoprocs ? 0 : masterCoprocs.length;<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>    String[] updatedCoprocs = new String[length + 1];<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>    if (length &gt; 0) {<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>      System.arraycopy(masterCoprocs, 0, updatedCoprocs, 0, masterCoprocs.length);<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>    }<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>    updatedCoprocs[length] = MasterQuotasObserver.class.getName();<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>    conf.setStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, updatedCoprocs);<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>  }<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span><a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>  private void initMobCleaner() {<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>    this.expiredMobFileCleanerChore = new ExpiredMobFileCleanerChore(this);<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>    getChoreService().scheduleChore(expiredMobFileCleanerChore);<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span><a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>    int mobCompactionPeriod = conf.getInt(MobConstants.MOB_COMPACTION_CHORE_PERIOD,<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>        MobConstants.DEFAULT_MOB_COMPACTION_CHORE_PERIOD);<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>    if (mobCompactionPeriod &gt; 0) {<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>      this.mobCompactChore = new MobCompactionChore(this, mobCompactionPeriod);<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>      getChoreService().scheduleChore(mobCompactChore);<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>    } else {<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>      LOG<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>        .info("The period is " + mobCompactionPeriod + " seconds, MobCompactionChore is disabled");<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>    }<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>    this.mobCompactThread = new MasterMobCompactionThread(this);<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>  }<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span><a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>  /**<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>   * &lt;p&gt;<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>   * Create a {@link MasterMetaBootstrap} instance.<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>   * &lt;/p&gt;<a name="line.1295"></a>
+<span class="sourceLineNo">1168</span>    status.setStatus("Initializing MOB Cleaner");<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>    initMobCleaner();<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span><a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>    status.setStatus("Calling postStartMaster coprocessors");<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>    if (this.cpHost != null) {<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>      // don't let cp initialization errors kill the master<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>      try {<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>        this.cpHost.postStartMaster();<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>      } catch (IOException ioe) {<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>        LOG.error("Coprocessor postStartMaster() hook failed", ioe);<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>      }<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>    }<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span><a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>    zombieDetector.interrupt();<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>     * After master has started up, lets do balancer post startup initialization. Since this runs<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>     * in activeMasterManager thread, it should be fine.<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>     */<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>    long start = System.currentTimeMillis();<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>    this.balancer.postMasterStartupInitialize();<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>    if (LOG.isDebugEnabled()) {<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>      LOG.debug("Balancer post startup initialization complete, took " + (<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>          (System.currentTimeMillis() - start) / 1000) + " seconds");<a name="line.1191"></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><a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>  /**<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>   * Check hbase:meta is up and ready for reading. For use during Master startup only.<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>   * @return True if meta is UP and online and startup can progress. Otherwise, meta is not online<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>   *   and we will hold here until operator intervention.<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>   */<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>  @VisibleForTesting<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>  public boolean waitForMetaOnline() throws InterruptedException {<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    return isRegionOnline(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>  }<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>   * @return True if region is online and scannable else false if an error or shutdown (Otherwise<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>   *   we just block in here holding up all forward-progess).<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>   */<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>  private boolean isRegionOnline(RegionInfo ri) throws InterruptedException {<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>    RetryCounter rc = null;<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>    while (!isStopped()) {<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>      RegionState rs = this.assignmentManager.getRegionStates().getRegionState(ri);<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>      if (rs.isOpened()) {<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>        if (this.getServerManager().isServerOnline(rs.getServerName())) {<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>          return true;<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>        }<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>      }<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>      // Region is not OPEN.<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      Optional&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; optProc = this.procedureExecutor.getProcedures().<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>          stream().filter(p -&gt; p instanceof ServerCrashProcedure).findAny();<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>      // TODO: Add a page to refguide on how to do repair. Have this log message point to it.<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>      // Page will talk about loss of edits, how to schedule at least the meta WAL recovery, and<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>      // then how to assign including how to break region lock if one held.<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>      LOG.warn("{} is NOT online; state={}; ServerCrashProcedures={}. Master startup cannot " +<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>          "progress, in holding-pattern until region onlined.",<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>          ri.getRegionNameAsString(), rs, optProc.isPresent());<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>      // Check once-a-minute.<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      if (rc == null) {<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>        rc = new RetryCounterFactory(1000).create();<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>      }<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>      Threads.sleep(rc.getBackoffTimeAndIncrementAttempts());<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>    }<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>    return false;<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>  /**<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>   * Check hbase:namespace table is assigned. If not, startup will hang looking for the ns table<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>   * (TODO: Fix this! NS should not hold-up startup).<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>   * @return True if namespace table is up/online.<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>   */<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>  @VisibleForTesting<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>  public boolean waitForNamespaceOnline() throws InterruptedException {<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>    List&lt;RegionInfo&gt; ris = this.assignmentManager.getRegionStates().<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>        getRegionsOfTable(TableName.NAMESPACE_TABLE_NAME);<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>    if (ris.isEmpty()) {<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>      // If empty, means we've not assigned the namespace table yet... Just return true so startup<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>      // continues and the namespace table gets created.<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>      return true;<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>    }<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>    // Else there are namespace regions up in meta. Ensure they are assigned before we go on.<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>    for (RegionInfo ri: ris) {<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>      isRegionOnline(ri);<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>    }<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>    return true;<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>  }<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span><a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>  /**<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>   * Adds the {@code MasterQuotasObserver} to the list of configured Master observers to<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>   * automatically remove quotas for a table when that table is deleted.<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>   */<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>  @VisibleForTesting<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>  public void updateConfigurationForQuotasObserver(Configuration conf) {<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>    // We're configured to not delete quotas on table deletion, so we don't need to add the obs.<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>    if (!conf.getBoolean(<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>          MasterQuotasObserver.REMOVE_QUOTA_ON_TABLE_DELETE,<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>          MasterQuotasObserver.REMOVE_QUOTA_ON_TABLE_DELETE_DEFAULT)) {<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>      return;<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>    }<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>    String[] masterCoprocs = conf.getStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY);<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>    final int length = null == masterCoprocs ? 0 : masterCoprocs.length;<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>    String[] updatedCoprocs = new String[length + 1];<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>    if (length &gt; 0) {<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>      System.arraycopy(masterCoprocs, 0, updatedCoprocs, 0, masterCoprocs.length);<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>    }<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>    updatedCoprocs[length] = MasterQuotasObserver.class.getName();<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>    conf.setStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, updatedCoprocs);<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>  }<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span><a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>  private void initMobCleaner() {<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>    this.expiredMobFileCleanerChore = new ExpiredMobFileCleanerChore(this);<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>    getChoreService().scheduleChore(expiredMobFileCleanerChore);<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span><a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>    int mobCompactionPeriod = conf.getInt(MobConstants.MOB_COMPACTION_CHORE_PERIOD,<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>        MobConstants.DEFAULT_MOB_COMPACTION_CHORE_PERIOD);<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>    if (mobCompactionPeriod &gt; 0) {<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>      this.mobCompactChore = new MobCompactionChore(this, mobCompactionPeriod);<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>      getChoreService().scheduleChore(mobCompactChore);<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>    } else {<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>      LOG<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>        .info("The period is " + mobCompactionPeriod + " seconds, MobCompactionChore is disabled");<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>    }<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>    this.mobCompactThread = new MasterMobCompactionThread(this);<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>  /**<a name="line.1295"></a>
 <span class="sourceLineNo">1296</span>   * &lt;p&gt;<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>   * Will be overridden in tests.<a name="line.1297"></a>
+<span class="sourceLineNo">1297</span>   * Create a {@link MasterMetaBootstrap} instance.<a name="line.1297"></a>
 <span class="sourceLineNo">1298</span>   * &lt;/p&gt;<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>   */<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>  @VisibleForTesting<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>  protected MasterMetaBootstrap createMetaBootstrap() {<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>    // w/ a mocked up MasterMetaBootstrap.<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>    return new MasterMetaBootstrap(this);<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>  }<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span><a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>  /**<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>   * &lt;p&gt;<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>   * Create a {@link ServerManager} instance.<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>   * &lt;/p&gt;<a name="line.1310"></a>
+<span class="sourceLineNo">1299</span>   * &lt;p&gt;<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>   * Will be overridden in tests.<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>   * &lt;/p&gt;<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>   */<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>  @VisibleForTesting<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>  protected MasterMetaBootstrap createMetaBootstrap() {<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>    // w/ a mocked up MasterMetaBootstrap.<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>    return new MasterMetaBootstrap(this);<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>  }<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span><a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>  /**<a name="line.1310"></a>
 <span class="sourceLineNo">1311</span>   * &lt;p&gt;<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>   * Will be overridden in tests.<a name="line.1312"></a>
+<span class="sourceLineNo">1312</span>   * Create a {@link ServerManager} instance.<a name="line.1312"></a>
 <span class="sourceLineNo">1313</span>   * &lt;/p&gt;<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>   */<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>  @VisibleForTesting<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>  protected ServerManager createServerManager(final MasterServices master) throws IOException {<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>    // w/ a mocked up ServerManager.<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>    setupClusterConnection();<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>    return new ServerManager(master);<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>  }<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span><a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>  private void waitForRegionServers(final MonitoredTask status)<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>      throws IOException, InterruptedException {<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>    this.serverManager.waitForRegionServers(status);<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>  }<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span><a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>  // Will be overridden in tests<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>  @VisibleForTesting<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>  protected void initClusterSchemaService() throws IOException, InterruptedException {<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>    this.clusterSchemaService = new ClusterSchemaServiceImpl(this);<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>    this.clusterSchemaService.startAsync();<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>    try {<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>      this.clusterSchemaService.awaitRunning(getConfiguration().getInt(<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>        HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS,<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>        DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS), TimeUnit.SECONDS);<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    } catch (TimeoutException toe) {<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>      throw new IOException("Timedout starting ClusterSchemaService", toe);<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    }<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>  }<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span><a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>  private void initQuotaManager() throws IOException {<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>    MasterQuotaManager quotaManager = new MasterQuotaManager(this);<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>    quotaManager.start();<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>    this.quotaManager = quotaManager;<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>  }<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span><a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>  private SpaceQuotaSnapshotNotifier createQuotaSnapshotNotifier() {<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    SpaceQuotaSnapshotNotifier notifier =<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>        SpaceQuotaSnapshotNotifierFactory.getInstance().create(getConfiguration());<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    return notifier;<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>  }<a name="line.1352"></a>
-<span class="sourceLineN

<TRUNCATED>

[05/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html
index bf81ebb..a170ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html
@@ -606,3246 +606,3245 @@
 <span class="sourceLineNo">598</span><a name="line.598"></a>
 <span class="sourceLineNo">599</span>      regionServerAccounting = new RegionServerAccounting(conf);<a name="line.599"></a>
 <span class="sourceLineNo">600</span>      boolean isMasterNotCarryTable =<a name="line.600"></a>
-<span class="sourceLineNo">601</span>          this instanceof HMaster &amp;&amp; !LoadBalancer.isTablesOnMaster(conf) &amp;&amp; !LoadBalancer<a name="line.601"></a>
-<span class="sourceLineNo">602</span>              .isSystemTablesOnlyOnMaster(conf);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      cacheConfig = new CacheConfig(conf, !isMasterNotCarryTable);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      mobCacheConfig = new MobCacheConfig(conf, !isMasterNotCarryTable);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      uncaughtExceptionHandler = new UncaughtExceptionHandler() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>        @Override<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        public void uncaughtException(Thread t, Throwable e) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>          abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        }<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      };<a name="line.610"></a>
-<span class="sourceLineNo">611</span><a name="line.611"></a>
-<span class="sourceLineNo">612</span>      initializeFileSystem();<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      spanReceiverHost = SpanReceiverHost.getInstance(getConfiguration());<a name="line.613"></a>
-<span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>      this.configurationManager = new ConfigurationManager();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      setupWindows(getConfiguration(), getConfigurationManager());<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>      // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>        // Open connection to zookeeper and set primary watcher<a name="line.620"></a>
-<span class="sourceLineNo">621</span>        zooKeeper = new ZKWatcher(conf, getProcessName() + ":" +<a name="line.621"></a>
-<span class="sourceLineNo">622</span>          rpcServices.isa.getPort(), this, canCreateBaseZNode());<a name="line.622"></a>
-<span class="sourceLineNo">623</span>        // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.623"></a>
-<span class="sourceLineNo">624</span>        if (!this.masterless) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>          this.csm = new ZkCoordinatedStateManager(this);<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span>          masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.627"></a>
-<span class="sourceLineNo">628</span>          masterAddressTracker.start();<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>          clusterStatusTracker = new ClusterStatusTracker(zooKeeper, this);<a name="line.630"></a>
-<span class="sourceLineNo">631</span>          clusterStatusTracker.start();<a name="line.631"></a>
-<span class="sourceLineNo">632</span>        } else {<a name="line.632"></a>
-<span class="sourceLineNo">633</span>          masterAddressTracker = null;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>          clusterStatusTracker = null;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>        }<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      } else {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>        zooKeeper = null;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        masterAddressTracker = null;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        clusterStatusTracker = null;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      }<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      this.rpcServices.start(zooKeeper);<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      // This violates 'no starting stuff in Constructor' but Master depends on the below chore<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      // and executor being created and takes a different startup route. Lots of overlap between HRS<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      // and M (An M IS A HRS now). Need to refactor so less duplication between M and its super<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      // Master expects Constructor to put up web servers. Ugh.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      // class HRS. TODO.<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      this.choreService = new ChoreService(getName(), true);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      this.executorService = new ExecutorService(getName());<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      putUpWebUI();<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    } catch (Throwable t) {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      // cause of failed startup is lost.<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      LOG.error("Failed construction RegionServer", t);<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      throw t;<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>  }<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span>  // HMaster should override this method to load the specific config for master<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    String hostname = conf.get(RS_HOSTNAME_KEY);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    if (conf.getBoolean(RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.662"></a>
-<span class="sourceLineNo">663</span>        String msg = RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and " + RS_HOSTNAME_KEY +<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          " are mutually exclusive. Do not set " + RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY +<a name="line.664"></a>
-<span class="sourceLineNo">665</span>          " to true while " + RS_HOSTNAME_KEY + " is used";<a name="line.665"></a>
-<span class="sourceLineNo">666</span>        throw new IOException(msg);<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      } else {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        return rpcServices.isa.getHostName();<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      }<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    } else {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>      return hostname;<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    }<a name="line.672"></a>
-<span class="sourceLineNo">673</span>  }<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span>  /**<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   * If running on Windows, do windows-specific setup.<a name="line.676"></a>
-<span class="sourceLineNo">677</span>   */<a name="line.677"></a>
-<span class="sourceLineNo">678</span>  private static void setupWindows(final Configuration conf, ConfigurationManager cm) {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    if (!SystemUtils.IS_OS_WINDOWS) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      Signal.handle(new Signal("HUP"), new SignalHandler() {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        @Override<a name="line.681"></a>
-<span class="sourceLineNo">682</span>        public void handle(Signal signal) {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          conf.reloadConfiguration();<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          cm.notifyAllObservers(conf);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>        }<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><a name="line.689"></a>
-<span class="sourceLineNo">690</span>  private static NettyEventLoopGroupConfig setupNetty(Configuration conf) {<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    // Initialize netty event loop group at start as we may use it for rpc server, rpc client &amp; WAL.<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    NettyEventLoopGroupConfig nelgc =<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      new NettyEventLoopGroupConfig(conf, "RS-EventLoopGroup");<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    NettyRpcClientConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    NettyAsyncFSWALConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    return nelgc;<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 void initializeFileSystem() throws IOException {<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    // Get fs instance used by this RS.  Do we use checksum verification in the hbase? If hbase<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    // checksum verification enabled, then automatically switch off hdfs checksum verification.<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    boolean useHBaseChecksum = conf.getBoolean(HConstants.HBASE_CHECKSUM_VERIFICATION, true);<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    FSUtils.setFsDefault(this.conf, FSUtils.getWALRootDir(this.conf));<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    this.walFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    this.walRootDir = FSUtils.getWALRootDir(this.conf);<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    // Set 'fs.defaultFS' to match the filesystem on hbase.rootdir else<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    // underlying hadoop hdfs accessors will be going against wrong filesystem<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    // (unless all is set to defaults).<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    FSUtils.setFsDefault(this.conf, FSUtils.getRootDir(this.conf));<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    this.fs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    this.rootDir = FSUtils.getRootDir(this.conf);<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    this.tableDescriptors = getFsTableDescriptors();<a name="line.712"></a>
-<span class="sourceLineNo">713</span>  }<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span>  protected TableDescriptors getFsTableDescriptors() throws IOException {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    return new FSTableDescriptors(this.conf,<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      this.fs, this.rootDir, !canUpdateTableDescriptor(), false, getMetaTableObserver());<a name="line.717"></a>
-<span class="sourceLineNo">718</span>  }<a name="line.718"></a>
-<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>  protected Function&lt;TableDescriptorBuilder, TableDescriptorBuilder&gt; getMetaTableObserver() {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    return null;<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  }<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    user.login("hbase.regionserver.keytab.file",<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      "hbase.regionserver.kerberos.principal", host);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>  }<a name="line.727"></a>
+<span class="sourceLineNo">601</span>          this instanceof HMaster &amp;&amp; !LoadBalancer.isTablesOnMaster(conf);<a name="line.601"></a>
+<span class="sourceLineNo">602</span>      cacheConfig = new CacheConfig(conf, !isMasterNotCarryTable);<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      mobCacheConfig = new MobCacheConfig(conf, !isMasterNotCarryTable);<a name="line.603"></a>
+<span class="sourceLineNo">604</span>      uncaughtExceptionHandler = new UncaughtExceptionHandler() {<a name="line.604"></a>
+<span class="sourceLineNo">605</span>        @Override<a name="line.605"></a>
+<span class="sourceLineNo">606</span>        public void uncaughtException(Thread t, Throwable e) {<a name="line.606"></a>
+<span class="sourceLineNo">607</span>          abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.607"></a>
+<span class="sourceLineNo">608</span>        }<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      };<a name="line.609"></a>
+<span class="sourceLineNo">610</span><a name="line.610"></a>
+<span class="sourceLineNo">611</span>      initializeFileSystem();<a name="line.611"></a>
+<span class="sourceLineNo">612</span>      spanReceiverHost = SpanReceiverHost.getInstance(getConfiguration());<a name="line.612"></a>
+<span class="sourceLineNo">613</span><a name="line.613"></a>
+<span class="sourceLineNo">614</span>      this.configurationManager = new ConfigurationManager();<a name="line.614"></a>
+<span class="sourceLineNo">615</span>      setupWindows(getConfiguration(), getConfigurationManager());<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span>      // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.617"></a>
+<span class="sourceLineNo">618</span>      if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>        // Open connection to zookeeper and set primary watcher<a name="line.619"></a>
+<span class="sourceLineNo">620</span>        zooKeeper = new ZKWatcher(conf, getProcessName() + ":" +<a name="line.620"></a>
+<span class="sourceLineNo">621</span>          rpcServices.isa.getPort(), this, canCreateBaseZNode());<a name="line.621"></a>
+<span class="sourceLineNo">622</span>        // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.622"></a>
+<span class="sourceLineNo">623</span>        if (!this.masterless) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>          this.csm = new ZkCoordinatedStateManager(this);<a name="line.624"></a>
+<span class="sourceLineNo">625</span><a name="line.625"></a>
+<span class="sourceLineNo">626</span>          masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.626"></a>
+<span class="sourceLineNo">627</span>          masterAddressTracker.start();<a name="line.627"></a>
+<span class="sourceLineNo">628</span><a name="line.628"></a>
+<span class="sourceLineNo">629</span>          clusterStatusTracker = new ClusterStatusTracker(zooKeeper, this);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>          clusterStatusTracker.start();<a name="line.630"></a>
+<span class="sourceLineNo">631</span>        } else {<a name="line.631"></a>
+<span class="sourceLineNo">632</span>          masterAddressTracker = null;<a name="line.632"></a>
+<span class="sourceLineNo">633</span>          clusterStatusTracker = null;<a name="line.633"></a>
+<span class="sourceLineNo">634</span>        }<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      } else {<a name="line.635"></a>
+<span class="sourceLineNo">636</span>        zooKeeper = null;<a name="line.636"></a>
+<span class="sourceLineNo">637</span>        masterAddressTracker = null;<a name="line.637"></a>
+<span class="sourceLineNo">638</span>        clusterStatusTracker = null;<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      }<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      this.rpcServices.start(zooKeeper);<a name="line.640"></a>
+<span class="sourceLineNo">641</span>      // This violates 'no starting stuff in Constructor' but Master depends on the below chore<a name="line.641"></a>
+<span class="sourceLineNo">642</span>      // and executor being created and takes a different startup route. Lots of overlap between HRS<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      // and M (An M IS A HRS now). Need to refactor so less duplication between M and its super<a name="line.643"></a>
+<span class="sourceLineNo">644</span>      // Master expects Constructor to put up web servers. Ugh.<a name="line.644"></a>
+<span class="sourceLineNo">645</span>      // class HRS. TODO.<a name="line.645"></a>
+<span class="sourceLineNo">646</span>      this.choreService = new ChoreService(getName(), true);<a name="line.646"></a>
+<span class="sourceLineNo">647</span>      this.executorService = new ExecutorService(getName());<a name="line.647"></a>
+<span class="sourceLineNo">648</span>      putUpWebUI();<a name="line.648"></a>
+<span class="sourceLineNo">649</span>    } catch (Throwable t) {<a name="line.649"></a>
+<span class="sourceLineNo">650</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      // cause of failed startup is lost.<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      LOG.error("Failed construction RegionServer", t);<a name="line.652"></a>
+<span class="sourceLineNo">653</span>      throw t;<a name="line.653"></a>
+<span class="sourceLineNo">654</span>    }<a name="line.654"></a>
+<span class="sourceLineNo">655</span>  }<a name="line.655"></a>
+<span class="sourceLineNo">656</span><a name="line.656"></a>
+<span class="sourceLineNo">657</span>  // HMaster should override this method to load the specific config for master<a name="line.657"></a>
+<span class="sourceLineNo">658</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.658"></a>
+<span class="sourceLineNo">659</span>    String hostname = conf.get(RS_HOSTNAME_KEY);<a name="line.659"></a>
+<span class="sourceLineNo">660</span>    if (conf.getBoolean(RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>        String msg = RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and " + RS_HOSTNAME_KEY +<a name="line.662"></a>
+<span class="sourceLineNo">663</span>          " are mutually exclusive. Do not set " + RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY +<a name="line.663"></a>
+<span class="sourceLineNo">664</span>          " to true while " + RS_HOSTNAME_KEY + " is used";<a name="line.664"></a>
+<span class="sourceLineNo">665</span>        throw new IOException(msg);<a name="line.665"></a>
+<span class="sourceLineNo">666</span>      } else {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>        return rpcServices.isa.getHostName();<a name="line.667"></a>
+<span class="sourceLineNo">668</span>      }<a name="line.668"></a>
+<span class="sourceLineNo">669</span>    } else {<a name="line.669"></a>
+<span class="sourceLineNo">670</span>      return hostname;<a name="line.670"></a>
+<span class="sourceLineNo">671</span>    }<a name="line.671"></a>
+<span class="sourceLineNo">672</span>  }<a name="line.672"></a>
+<span class="sourceLineNo">673</span><a name="line.673"></a>
+<span class="sourceLineNo">674</span>  /**<a name="line.674"></a>
+<span class="sourceLineNo">675</span>   * If running on Windows, do windows-specific setup.<a name="line.675"></a>
+<span class="sourceLineNo">676</span>   */<a name="line.676"></a>
+<span class="sourceLineNo">677</span>  private static void setupWindows(final Configuration conf, ConfigurationManager cm) {<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    if (!SystemUtils.IS_OS_WINDOWS) {<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      Signal.handle(new Signal("HUP"), new SignalHandler() {<a name="line.679"></a>
+<span class="sourceLineNo">680</span>        @Override<a name="line.680"></a>
+<span class="sourceLineNo">681</span>        public void handle(Signal signal) {<a name="line.681"></a>
+<span class="sourceLineNo">682</span>          conf.reloadConfiguration();<a name="line.682"></a>
+<span class="sourceLineNo">683</span>          cm.notifyAllObservers(conf);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>        }<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      });<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 static NettyEventLoopGroupConfig setupNetty(Configuration conf) {<a name="line.689"></a>
+<span class="sourceLineNo">690</span>    // Initialize netty event loop group at start as we may use it for rpc server, rpc client &amp; WAL.<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    NettyEventLoopGroupConfig nelgc =<a name="line.691"></a>
+<span class="sourceLineNo">692</span>      new NettyEventLoopGroupConfig(conf, "RS-EventLoopGroup");<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    NettyRpcClientConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    NettyAsyncFSWALConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    return nelgc;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>  }<a name="line.696"></a>
+<span class="sourceLineNo">697</span><a name="line.697"></a>
+<span class="sourceLineNo">698</span>  private void initializeFileSystem() throws IOException {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>    // Get fs instance used by this RS.  Do we use checksum verification in the hbase? If hbase<a name="line.699"></a>
+<span class="sourceLineNo">700</span>    // checksum verification enabled, then automatically switch off hdfs checksum verification.<a name="line.700"></a>
+<span class="sourceLineNo">701</span>    boolean useHBaseChecksum = conf.getBoolean(HConstants.HBASE_CHECKSUM_VERIFICATION, true);<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    FSUtils.setFsDefault(this.conf, FSUtils.getWALRootDir(this.conf));<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    this.walFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>    this.walRootDir = FSUtils.getWALRootDir(this.conf);<a name="line.704"></a>
+<span class="sourceLineNo">705</span>    // Set 'fs.defaultFS' to match the filesystem on hbase.rootdir else<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    // underlying hadoop hdfs accessors will be going against wrong filesystem<a name="line.706"></a>
+<span class="sourceLineNo">707</span>    // (unless all is set to defaults).<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    FSUtils.setFsDefault(this.conf, FSUtils.getRootDir(this.conf));<a name="line.708"></a>
+<span class="sourceLineNo">709</span>    this.fs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.709"></a>
+<span class="sourceLineNo">710</span>    this.rootDir = FSUtils.getRootDir(this.conf);<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    this.tableDescriptors = getFsTableDescriptors();<a name="line.711"></a>
+<span class="sourceLineNo">712</span>  }<a name="line.712"></a>
+<span class="sourceLineNo">713</span><a name="line.713"></a>
+<span class="sourceLineNo">714</span>  protected TableDescriptors getFsTableDescriptors() throws IOException {<a name="line.714"></a>
+<span class="sourceLineNo">715</span>    return new FSTableDescriptors(this.conf,<a name="line.715"></a>
+<span class="sourceLineNo">716</span>      this.fs, this.rootDir, !canUpdateTableDescriptor(), false, getMetaTableObserver());<a name="line.716"></a>
+<span class="sourceLineNo">717</span>  }<a name="line.717"></a>
+<span class="sourceLineNo">718</span><a name="line.718"></a>
+<span class="sourceLineNo">719</span>  protected Function&lt;TableDescriptorBuilder, TableDescriptorBuilder&gt; getMetaTableObserver() {<a name="line.719"></a>
+<span class="sourceLineNo">720</span>    return null;<a name="line.720"></a>
+<span class="sourceLineNo">721</span>  }<a name="line.721"></a>
+<span class="sourceLineNo">722</span><a name="line.722"></a>
+<span class="sourceLineNo">723</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.723"></a>
+<span class="sourceLineNo">724</span>    user.login("hbase.regionserver.keytab.file",<a name="line.724"></a>
+<span class="sourceLineNo">725</span>      "hbase.regionserver.kerberos.principal", host);<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><a name="line.729"></a>
-<span class="sourceLineNo">730</span>  /**<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * Wait for an active Master.<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   * See override in Master superclass for how it is used.<a name="line.732"></a>
-<span class="sourceLineNo">733</span>   */<a name="line.733"></a>
-<span class="sourceLineNo">734</span>  protected void waitForMasterActive() {}<a name="line.734"></a>
-<span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>  protected String getProcessName() {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    return REGIONSERVER;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  protected boolean canCreateBaseZNode() {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    return this.masterless;<a name="line.741"></a>
-<span class="sourceLineNo">742</span>  }<a name="line.742"></a>
-<span class="sourceLineNo">743</span><a name="line.743"></a>
-<span class="sourceLineNo">744</span>  protected boolean canUpdateTableDescriptor() {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    return false;<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
-<span class="sourceLineNo">747</span><a name="line.747"></a>
-<span class="sourceLineNo">748</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    return new RSRpcServices(this);<a name="line.749"></a>
-<span class="sourceLineNo">750</span>  }<a name="line.750"></a>
-<span class="sourceLineNo">751</span><a name="line.751"></a>
-<span class="sourceLineNo">752</span>  protected void configureInfoServer() {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    infoServer.addServlet("rs-status", "/rs-status", RSStatusServlet.class);<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    infoServer.setAttribute(REGIONSERVER, this);<a name="line.754"></a>
-<span class="sourceLineNo">755</span>  }<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    return RSDumpServlet.class;<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>  @Override<a name="line.761"></a>
-<span class="sourceLineNo">762</span>  public boolean registerService(com.google.protobuf.Service instance) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    /*<a name="line.763"></a>
-<span class="sourceLineNo">764</span>     * No stacking of instances is allowed for a single executorService name<a name="line.764"></a>
-<span class="sourceLineNo">765</span>     */<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    com.google.protobuf.Descriptors.ServiceDescriptor serviceDesc =<a name="line.766"></a>
-<span class="sourceLineNo">767</span>        instance.getDescriptorForType();<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      LOG.error("Coprocessor executorService " + serviceName<a name="line.770"></a>
-<span class="sourceLineNo">771</span>          + " already registered, rejecting request from " + instance);<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      return false;<a name="line.772"></a>
-<span class="sourceLineNo">773</span>    }<a name="line.773"></a>
-<span class="sourceLineNo">774</span><a name="line.774"></a>
-<span class="sourceLineNo">775</span>    coprocessorServiceHandlers.put(serviceName, instance);<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    if (LOG.isDebugEnabled()) {<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      LOG.debug("Registered regionserver coprocessor executorService: executorService=" + serviceName);<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    }<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    return true;<a name="line.779"></a>
-<span class="sourceLineNo">780</span>  }<a name="line.780"></a>
-<span class="sourceLineNo">781</span><a name="line.781"></a>
-<span class="sourceLineNo">782</span>  /**<a name="line.782"></a>
-<span class="sourceLineNo">783</span>   * Create a 'smarter' Connection, one that is capable of by-passing RPC if the request is to<a name="line.783"></a>
-<span class="sourceLineNo">784</span>   * the local server; i.e. a short-circuit Connection. Safe to use going to local or remote<a name="line.784"></a>
-<span class="sourceLineNo">785</span>   * server. Create this instance in a method can be intercepted and mocked in tests.<a name="line.785"></a>
-<span class="sourceLineNo">786</span>   * @throws IOException<a name="line.786"></a>
-<span class="sourceLineNo">787</span>   */<a name="line.787"></a>
-<span class="sourceLineNo">788</span>  @VisibleForTesting<a name="line.788"></a>
-<span class="sourceLineNo">789</span>  protected ClusterConnection createClusterConnection() throws IOException {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    Configuration conf = this.conf;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    if (conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM) != null) {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      // Use server ZK cluster for server-issued connections, so we clone<a name="line.792"></a>
-<span class="sourceLineNo">793</span>      // the conf and unset the client ZK related properties<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      conf = new Configuration(this.conf);<a name="line.794"></a>
-<span class="sourceLineNo">795</span>      conf.unset(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>    }<a name="line.796"></a>
-<span class="sourceLineNo">797</span>    // Create a cluster connection that when appropriate, can short-circuit and go directly to the<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    // local server if the request is to the local server bypassing RPC. Can be used for both local<a name="line.798"></a>
-<span class="sourceLineNo">799</span>    // and remote invocations.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    return ConnectionUtils.createShortCircuitConnection(conf, null, userProvider.getCurrent(),<a name="line.800"></a>
-<span class="sourceLineNo">801</span>      serverName, rpcServices, rpcServices);<a name="line.801"></a>
-<span class="sourceLineNo">802</span>  }<a name="line.802"></a>
-<span class="sourceLineNo">803</span><a name="line.803"></a>
-<span class="sourceLineNo">804</span>  /**<a name="line.804"></a>
-<span class="sourceLineNo">805</span>   * Run test on configured codecs to make sure supporting libs are in place.<a name="line.805"></a>
-<span class="sourceLineNo">806</span>   * @param c<a name="line.806"></a>
-<span class="sourceLineNo">807</span>   * @throws IOException<a name="line.807"></a>
-<span class="sourceLineNo">808</span>   */<a name="line.808"></a>
-<span class="sourceLineNo">809</span>  private static void checkCodecs(final Configuration c) throws IOException {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    // check to see if the codec list is available:<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    String [] codecs = c.getStrings("hbase.regionserver.codecs", (String[])null);<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    if (codecs == null) return;<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    for (String codec : codecs) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>      if (!CompressionTest.testCompression(codec)) {<a name="line.814"></a>
-<span class="sourceLineNo">815</span>        throw new IOException("Compression codec " + codec +<a name="line.815"></a>
-<span class="sourceLineNo">816</span>          " not supported, aborting RS construction");<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      }<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
-<span class="sourceLineNo">819</span>  }<a name="line.819"></a>
-<span class="sourceLineNo">820</span><a name="line.820"></a>
-<span class="sourceLineNo">821</span>  public String getClusterId() {<a name="line.821"></a>
-<span class="sourceLineNo">822</span>    return this.clusterId;<a name="line.822"></a>
-<span class="sourceLineNo">823</span>  }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>  /**<a name="line.825"></a>
-<span class="sourceLineNo">826</span>   * Setup our cluster connection if not already initialized.<a name="line.826"></a>
-<span class="sourceLineNo">827</span>   * @throws IOException<a name="line.827"></a>
-<span class="sourceLineNo">828</span>   */<a name="line.828"></a>
-<span class="sourceLineNo">829</span>  protected synchronized void setupClusterConnection() throws IOException {<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    if (clusterConnection == null) {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>      clusterConnection = createClusterConnection();<a name="line.831"></a>
-<span class="sourceLineNo">832</span>      metaTableLocator = new MetaTableLocator();<a name="line.832"></a>
-<span class="sourceLineNo">833</span>    }<a name="line.833"></a>
-<span class="sourceLineNo">834</span>  }<a name="line.834"></a>
-<span class="sourceLineNo">835</span><a name="line.835"></a>
-<span class="sourceLineNo">836</span>  /**<a name="line.836"></a>
-<span class="sourceLineNo">837</span>   * All initialization needed before we go register with Master.&lt;br&gt;<a name="line.837"></a>
-<span class="sourceLineNo">838</span>   * Do bare minimum. Do bulk of initializations AFTER we've connected to the Master.&lt;br&gt;<a name="line.838"></a>
-<span class="sourceLineNo">839</span>   * In here we just put up the RpcServer, setup Connection, and ZooKeeper.<a name="line.839"></a>
-<span class="sourceLineNo">840</span>   */<a name="line.840"></a>
-<span class="sourceLineNo">841</span>  private void preRegistrationInitialization() {<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    try {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      initializeZooKeeper();<a name="line.843"></a>
-<span class="sourceLineNo">844</span>      setupClusterConnection();<a name="line.844"></a>
-<span class="sourceLineNo">845</span>      // Setup RPC client for master communication<a name="line.845"></a>
-<span class="sourceLineNo">846</span>      this.rpcClient = RpcClientFactory.createClient(conf, clusterId, new InetSocketAddress(<a name="line.846"></a>
-<span class="sourceLineNo">847</span>          this.rpcServices.isa.getAddress(), 0), clusterConnection.getConnectionMetrics());<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    } catch (Throwable t) {<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      // Call stop if error or process will stick around for ever since server<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      // puts up non-daemon threads.<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      this.rpcServices.stop();<a name="line.851"></a>
-<span class="sourceLineNo">852</span>      abort("Initialization of RS failed.  Hence aborting RS.", t);<a name="line.852"></a>
-<span class="sourceLineNo">853</span>    }<a name="line.853"></a>
-<span class="sourceLineNo">854</span>  }<a name="line.854"></a>
-<span class="sourceLineNo">855</span><a name="line.855"></a>
-<span class="sourceLineNo">856</span>  /**<a name="line.856"></a>
-<span class="sourceLineNo">857</span>   * Bring up connection to zk ensemble and then wait until a master for this cluster and then after<a name="line.857"></a>
-<span class="sourceLineNo">858</span>   * that, wait until cluster 'up' flag has been set. This is the order in which master does things.<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * &lt;p&gt;<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * Finally open long-living server short-circuit connection.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   */<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE",<a name="line.862"></a>
-<span class="sourceLineNo">863</span>    justification="cluster Id znode read would give us correct response")<a name="line.863"></a>
-<span class="sourceLineNo">864</span>  private void initializeZooKeeper() throws IOException, InterruptedException {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>    // Nothing to do in here if no Master in the mix.<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    if (this.masterless) {<a name="line.866"></a>
-<span class="sourceLineNo">867</span>      return;<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    }<a name="line.868"></a>
-<span class="sourceLineNo">869</span><a name="line.869"></a>
-<span class="sourceLineNo">870</span>    // Create the master address tracker, register with zk, and start it.  Then<a name="line.870"></a>
-<span class="sourceLineNo">871</span>    // block until a master is available.  No point in starting up if no master<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    // running.<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    blockAndCheckIfStopped(this.masterAddressTracker);<a name="line.873"></a>
-<span class="sourceLineNo">874</span><a name="line.874"></a>
-<span class="sourceLineNo">875</span>    // Wait on cluster being up.  Master will set this flag up in zookeeper<a name="line.875"></a>
-<span class="sourceLineNo">876</span>    // when ready.<a name="line.876"></a>
-<span class="sourceLineNo">877</span>    blockAndCheckIfStopped(this.clusterStatusTracker);<a name="line.877"></a>
-<span class="sourceLineNo">878</span><a name="line.878"></a>
-<span class="sourceLineNo">879</span>    // If we are HMaster then the cluster id should have already been set.<a name="line.879"></a>
-<span class="sourceLineNo">880</span>    if (clusterId == null) {<a name="line.880"></a>
-<span class="sourceLineNo">881</span>      // Retrieve clusterId<a name="line.881"></a>
-<span class="sourceLineNo">882</span>      // Since cluster status is now up<a name="line.882"></a>
-<span class="sourceLineNo">883</span>      // ID should have already been set by HMaster<a name="line.883"></a>
-<span class="sourceLineNo">884</span>      try {<a name="line.884"></a>
-<span class="sourceLineNo">885</span>        clusterId = ZKClusterId.readClusterIdZNode(this.zooKeeper);<a name="line.885"></a>
-<span class="sourceLineNo">886</span>        if (clusterId == null) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>          this.abort("Cluster ID has not been set");<a name="line.887"></a>
-<span class="sourceLineNo">888</span>        }<a name="line.888"></a>
-<span class="sourceLineNo">889</span>        LOG.info("ClusterId : " + clusterId);<a name="line.889"></a>
-<span class="sourceLineNo">890</span>      } catch (KeeperException e) {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>        this.abort("Failed to retrieve Cluster ID", e);<a name="line.891"></a>
-<span class="sourceLineNo">892</span>      }<a name="line.892"></a>
-<span class="sourceLineNo">893</span>    }<a name="line.893"></a>
-<span class="sourceLineNo">894</span><a name="line.894"></a>
-<span class="sourceLineNo">895</span>    waitForMasterActive();<a name="line.895"></a>
-<span class="sourceLineNo">896</span>    if (isStopped() || isAborted()) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      return; // No need for further initialization<a name="line.897"></a>
-<span class="sourceLineNo">898</span>    }<a name="line.898"></a>
-<span class="sourceLineNo">899</span><a name="line.899"></a>
-<span class="sourceLineNo">900</span>    // watch for snapshots and other procedures<a name="line.900"></a>
-<span class="sourceLineNo">901</span>    try {<a name="line.901"></a>
-<span class="sourceLineNo">902</span>      rspmHost = new RegionServerProcedureManagerHost();<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      rspmHost.loadProcedures(conf);<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      rspmHost.initialize(this);<a name="line.904"></a>
-<span class="sourceLineNo">905</span>    } catch (KeeperException e) {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>      this.abort("Failed to reach coordination cluster when creating procedure handler.", e);<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><a name="line.909"></a>
-<span class="sourceLineNo">910</span>  /**<a name="line.910"></a>
-<span class="sourceLineNo">911</span>   * Utilty method to wait indefinitely on a znode availability while checking<a name="line.911"></a>
-<span class="sourceLineNo">912</span>   * if the region server is shut down<a name="line.912"></a>
-<span class="sourceLineNo">913</span>   * @param tracker znode tracker to use<a name="line.913"></a>
-<span class="sourceLineNo">914</span>   * @throws IOException any IO exception, plus if the RS is stopped<a name="line.914"></a>
-<span class="sourceLineNo">915</span>   * @throws InterruptedException<a name="line.915"></a>
-<span class="sourceLineNo">916</span>   */<a name="line.916"></a>
-<span class="sourceLineNo">917</span>  private void blockAndCheckIfStopped(ZKNodeTracker tracker)<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      throws IOException, InterruptedException {<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    while (tracker.blockUntilAvailable(this.msgInterval, false) == null) {<a name="line.919"></a>
-<span class="sourceLineNo">920</span>      if (this.stopped) {<a name="line.920"></a>
-<span class="sourceLineNo">921</span>        throw new IOException("Received the shutdown message while waiting.");<a name="line.921"></a>
-<span class="sourceLineNo">922</span>      }<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    }<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  }<a name="line.924"></a>
-<span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>  /**<a name="line.926"></a>
-<span class="sourceLineNo">927</span>   * @return True if the cluster is up.<a name="line.927"></a>
-<span class="sourceLineNo">928</span>   */<a name="line.928"></a>
-<span class="sourceLineNo">929</span>  @Override<a name="line.929"></a>
-<span class="sourceLineNo">930</span>  public boolean isClusterUp() {<a name="line.930"></a>
-<span class="sourceLineNo">931</span>    return this.masterless ||<a name="line.931"></a>
-<span class="sourceLineNo">932</span>        (this.clusterStatusTracker != null &amp;&amp; this.clusterStatusTracker.isClusterUp());<a name="line.932"></a>
-<span class="sourceLineNo">933</span>  }<a name="line.933"></a>
-<span class="sourceLineNo">934</span><a name="line.934"></a>
-<span class="sourceLineNo">935</span>  /**<a name="line.935"></a>
-<span class="sourceLineNo">936</span>   * The HRegionServer sticks in this loop until closed.<a name="line.936"></a>
-<span class="sourceLineNo">937</span>   */<a name="line.937"></a>
-<span class="sourceLineNo">938</span>  @Override<a name="line.938"></a>
-<span class="sourceLineNo">939</span>  public void run() {<a name="line.939"></a>
-<span class="sourceLineNo">940</span>    try {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>      // Do pre-registration initializations; zookeeper, lease threads, etc.<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      preRegistrationInitialization();<a name="line.942"></a>
-<span class="sourceLineNo">943</span>    } catch (Throwable e) {<a name="line.943"></a>
-<span class="sourceLineNo">944</span>      abort("Fatal exception during initialization", e);<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    }<a name="line.945"></a>
-<span class="sourceLineNo">946</span><a name="line.946"></a>
-<span class="sourceLineNo">947</span>    try {<a name="line.947"></a>
-<span class="sourceLineNo">948</span>      if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.948"></a>
-<span class="sourceLineNo">949</span>        ShutdownHook.install(conf, fs, this, Thread.currentThread());<a name="line.949"></a>
-<span class="sourceLineNo">950</span>        // Initialize the RegionServerCoprocessorHost now that our ephemeral<a name="line.950"></a>
-<span class="sourceLineNo">951</span>        // node was created, in case any coprocessors want to use ZooKeeper<a name="line.951"></a>
-<span class="sourceLineNo">952</span>        this.rsHost = new RegionServerCoprocessorHost(this, this.conf);<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      }<a name="line.953"></a>
-<span class="sourceLineNo">954</span><a name="line.954"></a>
-<span class="sourceLineNo">955</span>      // Try and register with the Master; tell it we are here.  Break if server is stopped or the<a name="line.955"></a>
-<span class="sourceLineNo">956</span>      // clusterup flag is down or hdfs went wacky. Once registered successfully, go ahead and start<a name="line.956"></a>
-<span class="sourceLineNo">957</span>      // up all Services. Use RetryCounter to get backoff in case Master is struggling to come up.<a name="line.957"></a>
-<span class="sourceLineNo">958</span>      LOG.debug("About to register with Master.");<a name="line.958"></a>
-<span class="sourceLineNo">959</span>      RetryCounterFactory rcf = new RetryCounterFactory(Integer.MAX_VALUE,<a name="line.959"></a>
-<span class="sourceLineNo">960</span>          this.sleeper.getPeriod(), 1000 * 60 * 5);<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      RetryCounter rc = rcf.create();<a name="line.961"></a>
-<span class="sourceLineNo">962</span>      while (keepLooping()) {<a name="line.962"></a>
-<span class="sourceLineNo">963</span>        RegionServerStartupResponse w = reportForDuty();<a name="line.963"></a>
-<span class="sourceLineNo">964</span>        if (w == null) {<a name="line.964"></a>
-<span class="sourceLineNo">965</span>          long sleepTime = rc.getBackoffTimeAndIncrementAttempts();<a name="line.965"></a>
-<span class="sourceLineNo">966</span>          LOG.warn("reportForDuty failed; sleeping {} ms and then retrying.", sleepTime);<a name="line.966"></a>
-<span class="sourceLineNo">967</span>          this.sleeper.sleep(sleepTime);<a name="line.967"></a>
-<span class="sourceLineNo">968</span>        } else {<a name="line.968"></a>
-<span class="sourceLineNo">969</span>          handleReportForDutyResponse(w);<a name="line.969"></a>
-<span class="sourceLineNo">970</span>          break;<a name="line.970"></a>
-<span class="sourceLineNo">971</span>        }<a name="line.971"></a>
-<span class="sourceLineNo">972</span>      }<a name="line.972"></a>
-<span class="sourceLineNo">973</span><a name="line.973"></a>
-<span class="sourceLineNo">974</span>      if (!isStopped() &amp;&amp; isHealthy()) {<a name="line.974"></a>
-<span class="sourceLineNo">975</span>        // start the snapshot handler and other procedure handlers,<a name="line.975"></a>
-<span class="sourceLineNo">976</span>        // since the server is ready to run<a name="line.976"></a>
-<span class="sourceLineNo">977</span>        if (this.rspmHost != null) {<a name="line.977"></a>
-<span class="sourceLineNo">978</span>          this.rspmHost.start();<a name="line.978"></a>
-<span class="sourceLineNo">979</span>        }<a name="line.979"></a>
-<span class="sourceLineNo">980</span>        // Start the Quota Manager<a name="line.980"></a>
-<span class="sourceLineNo">981</span>        if (this.rsQuotaManager != null) {<a name="line.981"></a>
-<span class="sourceLineNo">982</span>          rsQuotaManager.start(getRpcServer().getScheduler());<a name="line.982"></a>
-<span class="sourceLineNo">983</span>        }<a name="line.983"></a>
-<span class="sourceLineNo">984</span>        if (this.rsSpaceQuotaManager != null) {<a name="line.984"></a>
-<span class="sourceLineNo">985</span>          this.rsSpaceQuotaManager.start();<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        }<a name="line.986"></a>
-<span class="sourceLineNo">987</span>      }<a name="line.987"></a>
-<span class="sourceLineNo">988</span><a name="line.988"></a>
-<span class="sourceLineNo">989</span>      // We registered with the Master.  Go into run mode.<a name="line.989"></a>
-<span class="sourceLineNo">990</span>      long lastMsg = System.currentTimeMillis();<a name="line.990"></a>
-<span class="sourceLineNo">991</span>      long oldRequestCount = -1;<a name="line.991"></a>
-<span class="sourceLineNo">992</span>      // The main run loop.<a name="line.992"></a>
-<span class="sourceLineNo">993</span>      while (!isStopped() &amp;&amp; isHealthy()) {<a name="line.993"></a>
-<span class="sourceLineNo">994</span>        if (!isClusterUp()) {<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          if (isOnlineRegionsEmpty()) {<a name="line.995"></a>
-<span class="sourceLineNo">996</span>            stop("Exiting; cluster shutdown set and not carrying any regions");<a name="line.996"></a>
-<span class="sourceLineNo">997</span>          } else if (!this.stopping) {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>            this.stopping = true;<a name="line.998"></a>
-<span class="sourceLineNo">999</span>            LOG.info("Closing user regions");<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>            closeUserRegions(this.abortRequested);<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>          } else if (this.stopping) {<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>            boolean allUserRegionsOffline = areAllUserRegionsOffline();<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>            if (allUserRegionsOffline) {<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>              // Set stopped if no more write requests tp meta tables<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>              // since last time we went around the loop.  Any open<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>              // meta regions will be closed on our way out.<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>              if (oldRequestCount == getWriteRequestCount()) {<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>                stop("Stopped; only catalog regions remaining online");<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>                break;<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>              }<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>              oldRequestCount = getWriteRequestCount();<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>            } else {<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>              // Make sure all regions have been closed -- some regions may<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>              // have not got it because we were splitting at the time of<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>              // the call to closeUserRegions.<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>              closeUserRegions(this.abortRequested);<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>            }<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>            LOG.debug("Waiting on " + getOnlineRegionsAsPrintableString());<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>          }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>        }<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>        long now = System.currentTimeMillis();<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>        if ((now - lastMsg) &gt;= msgInterval) {<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>          tryRegionServerReport(lastMsg, now);<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>          lastMsg = System.currentTimeMillis();<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>        }<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>        if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>          this.sleeper.sleep();<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>        }<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>      } // for<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    } catch (Throwable t) {<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      if (!rpcServices.checkOOME(t)) {<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>        String prefix = t instanceof YouAreDeadException? "": "Unhandled: ";<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        abort(prefix + t.getMessage(), t);<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      }<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>    }<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span><a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>    if (abortRequested) {<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>      Timer abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      TimerTask abortTimeoutTask = null;<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>      try {<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>        abortTimeoutTask =<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>            Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>                .asSubclass(TimerTask.class).getDeclaredConstructor().newInstance();<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>      } catch (Exception e) {<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>      }<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>      if (abortTimeoutTask != null) {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>      }<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span><a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    if (this.leases != null) {<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>      this.leases.closeAfterLeasesExpire();<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>    }<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    if (this.splitLogWorker != null) {<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>      splitLogWorker.stop();<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    }<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    if (this.infoServer != null) {<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      LOG.info("Stopping infoServer");<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      try {<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>        this.infoServer.stop();<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>      } catch (Exception e) {<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>        LOG.error("Failed to stop infoServer", e);<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>      }<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    }<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    // Send cache a shutdown.<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    if (cacheConfig != null &amp;&amp; cacheConfig.isBlockCacheEnabled()) {<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>      cacheConfig.getBlockCache().shutdown();<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>    }<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    mobCacheConfig.getMobFileCache().shutdown();<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span><a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    if (movedRegionsCleaner != null) {<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>      movedRegionsCleaner.stop("Region Server stopping");<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>    // Send interrupts to wake up threads if sleeping so they notice shutdown.<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    // TODO: Should we check they are alive? If OOME could have exited already<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>    if (this.hMemManager != null) this.hMemManager.stop();<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    if (this.cacheFlusher != null) this.cacheFlusher.interruptIfNecessary();<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    if (this.compactSplitThread != null) this.compactSplitThread.interruptIfNecessary();<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>    sendShutdownInterrupt();<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span><a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>    // Stop the snapshot and other procedure handlers, forcefully killing all running tasks<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>    if (rspmHost != null) {<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>      rspmHost.stop(this.abortRequested || this.killed);<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    }<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span><a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    if (this.killed) {<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>      // Just skip out w/o closing regions.  Used when testing.<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    } else if (abortRequested) {<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>      if (this.fsOk) {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>        closeUserRegions(abortRequested); // Don't leave any open file handles<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      }<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>      LOG.info("aborting server " + this.serverName);<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    } else {<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      closeUserRegions(abortRequested);<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>      LOG.info("stopping server " + this.serverName);<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>    // so callers waiting for meta without timeout can stop<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    if (this.metaTableLocator != null) this.metaTableLocator.stop();<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    if (this.clusterConnection != null &amp;&amp; !clusterConnection.isClosed()) {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>      try {<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>        this.clusterConnection.close();<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>      } catch (IOException e) {<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>        // Although the {@link Closeable} interface throws an {@link<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>        // IOException}, in reality, the implementation would never do that.<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>        LOG.warn("Attempt to close server's short circuit ClusterConnection failed.", e);<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      }<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    }<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span><a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>    // Closing the compactSplit thread before closing meta regions<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>    if (!this.killed &amp;&amp; containsMetaTableRegions()) {<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>      if (!abortRequested || this.fsOk) {<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>        if (this.compactSplitThread != null) {<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>          this.compactSplitThread.join();<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>          this.compactSplitThread = null;<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>        }<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>        closeMetaTableRegions(abortRequested);<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>      }<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>    }<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span><a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    if (!this.killed &amp;&amp; this.fsOk) {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>      waitOnAllRegionsToClose(abortRequested);<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>      LOG.info("stopping server " + this.serverName + "; all regions closed.");<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>    // Stop the quota manager<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    if (rsQuotaManager != null) {<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>      rsQuotaManager.stop();<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    }<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    if (rsSpaceQuotaManager != null) {<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>      rsSpaceQuotaManager.stop();<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>      rsSpaceQuotaManager = null;<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>    //fsOk flag may be changed when closing regions throws exception.<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>    if (this.fsOk) {<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>      shutdownWAL(!abortRequested);<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>    // Make sure the proxy is down.<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    if (this.rssStub != null) {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>      this.rssStub = null;<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>    }<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    if (this.lockStub != null) {<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>      this.lockStub = null;<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>    }<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    if (this.rpcClient != null) {<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>      this.rpcClient.close();<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    }<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>    if (this.leases != null) {<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>      this.leases.close();<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>    }<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>    if (this.pauseMonitor != null) {<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>      this.pauseMonitor.stop();<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    }<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span><a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    if (!killed) {<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      stopServiceThreads();<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>    if (this.rpcServices != null) {<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      this.rpcServices.stop();<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>    try {<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>      deleteMyEphemeralNode();<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    } catch (KeeperException.NoNodeException nn) {<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>    } catch (KeeperException e) {<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>      LOG.warn("Failed deleting my ephemeral node", e);<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>    }<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    // We may have failed to delete the znode at the previous step, but<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>    //  we delete the file anyway: a second attempt to delete the znode is likely to fail again.<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    ZNodeClearer.deleteMyEphemeralNodeOnDisk();<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span><a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    if (this.zooKeeper != null) {<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>      this.zooKeeper.close();<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    }<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>    this.shutDown = true;<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>    LOG.info("Exiting; stopping=" + this.serverName + "; zookeeper connection closed.");<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>  private boolean containsMetaTableRegions() {<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    return onlineRegions.containsKey(RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedName());<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>  private boolean areAllUserRegionsOffline() {<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>    if (getNumberOfOnlineRegions() &gt; 2) return false;<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>    boolean allUserRegionsOffline = true;<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>      if (!e.getValue().getRegionInfo().isMetaRegion()) {<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>        allUserRegionsOffline = false;<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>        break;<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      }<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>    }<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>    return allUserRegionsOffline;<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>  /**<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>   * @return Current write count for all online regions.<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>   */<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>  private long getWriteRequestCount() {<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>    long writeCount = 0;<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>      writeCount += e.getValue().getWriteRequestsCount();<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>    }<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>    return writeCount;<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>  @VisibleForTesting<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>  protected void tryRegionServerReport(long reportStartTime, long reportEndTime)<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>      throws IOException {<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>    if (rss == null) {<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>      // the current server could be stopping.<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>      return;<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>    }<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>    ClusterStatusProtos.ServerLoad sl = buildServerLoad(reportStartTime, reportEndTime);<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>    try {<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>      RegionServerReportRequest.Builder request = RegionServerReportRequest.newBuilder();<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>      request.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>      request.setLoad(sl);<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>      rss.regionServerReport(null, request.build());<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>    } catch (ServiceException se) {<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>        // This will be caught and handled as a fatal error in run()<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>        throw ioe;<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>      }<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>      if (rssStub == rss) {<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>        rssStub = null;<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>      }<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>      // Method blocks until new master is found or we are stopped<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>      createRegionServerStatusStub(true);<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>    }<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>  }<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span><a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>  /**<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>   *<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>   * @param regionSizeStore The store containing region sizes<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>   */<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>    if (rss == null) {<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>      // the current server could be stopping.<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>      return true;<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    }<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>    try {<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>    } catch (ServiceException se) {<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>            + " This will be retried.", ioe);<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>        return true;<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>      }<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      if (rssStub == rss) {<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>        rssStub = null;<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>      }<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>      createRegionServerStatusStub(true);<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>            return false;<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>          }<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>        }<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>      }<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>    }<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>    return true;<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>  }<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span><a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>  /**<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>   *<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>   * @param rss The stub to send to the Master<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>   * @param regionSizeStore The store containing region sizes<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>   */<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>  void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>    RegionSpaceUseReportRequest request =<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>    // Record the number of size reports sent<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>    if (metricsRegionServer != null) {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>    }<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>  }<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span><a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>  /**<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>   *<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>   * @param regionSizes The size in bytes of regions<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>   * @return The corresponding protocol buffer message.<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>   */<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>    }<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>    return request.build();<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>  }<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span><a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>  /**<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>   * protobuf message.<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>   *<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>   * @param regionInfo The RegionInfo<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>   * @return The protocol buffer<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>   */<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>    return RegionSpaceUse.newBuilder()<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>        .build();<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>  }<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span><a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>  ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>      throws IOException {<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>    // the wrapper to compute those numbers in one place.<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    // history.<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>    long usedMemory = -1L;<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>    long maxMemory = -1L;<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>    if (usage != null) {<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>      usedMemory = usage.getUsed();<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>      maxMemory = usage.getMax();<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>    }<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span><a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.

<TRUNCATED>

[02/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/testdevapidocs/org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html b/testdevapidocs/org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html
new file mode 100644
index 0000000..c777c67
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html
@@ -0,0 +1,409 @@
+<!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>TestMasterNotCarryTable (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="TestMasterNotCarryTable (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":9,"i1":9,"i2":10,"i3":10,"i4":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/TestMasterNotCarryTable.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/TestMasterNoCluster.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html" target="_top">Frames</a></li>
+<li><a href="TestMasterNotCarryTable.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.master</div>
+<h2 title="Class TestMasterNotCarryTable" class="title">Class TestMasterNotCarryTable</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.TestMasterNotCarryTable</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/TestMasterNotCarryTable.html#line.39">TestMasterNotCarryTable</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">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static org.slf4j.Logger</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html#LOG">LOG</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static org.apache.hadoop.hbase.master.HMaster</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html#master">master</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/TestMasterNotCarryTable.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/TestMasterNotCarryTable.html#TestMasterNotCarryTable--">TestMasterNotCarryTable</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/TestMasterNotCarryTable.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/TestMasterNotCarryTable.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/TestMasterNotCarryTable.html#testMasterBlockCache--">testMasterBlockCache</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html#testMasterMemStoreLAB--">testMasterMemStoreLAB</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html#testMasterNotCarryTable--">testMasterNotCarryTable</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/TestMasterNotCarryTable.html#line.42">CLASS_RULE</a></pre>
+</li>
+</ul>
+<a name="LOG">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>LOG</h4>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html#line.45">LOG</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/TestMasterNotCarryTable.html#line.47">UTIL</a></pre>
+</li>
+</ul>
+<a name="master">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>master</h4>
+<pre>private static&nbsp;org.apache.hadoop.hbase.master.HMaster <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html#line.49">master</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="TestMasterNotCarryTable--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestMasterNotCarryTable</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html#line.39">TestMasterNotCarryTable</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/TestMasterNotCarryTable.html#line.52">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/TestMasterNotCarryTable.html#line.67">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="testMasterNotCarryTable--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testMasterNotCarryTable</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html#line.73">testMasterNotCarryTable</a>()</pre>
+</li>
+</ul>
+<a name="testMasterBlockCache--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testMasterBlockCache</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html#line.80">testMasterBlockCache</a>()</pre>
+</li>
+</ul>
+<a name="testMasterMemStoreLAB--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testMasterMemStoreLAB</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html#line.86">testMasterMemStoreLAB</a>()</pre>
+</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/TestMasterNotCarryTable.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/TestMasterNoCluster.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html" target="_top">Frames</a></li>
+<li><a href="TestMasterNotCarryTable.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/testdevapidocs/org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.html b/testdevapidocs/org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.html
index d0238df..e0d6b33 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterNoCluster.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterQosFunction.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -513,7 +513,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/TestMasterNoCluster.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterQosFunction.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/testdevapidocs/org/apache/hadoop/hbase/master/class-use/TestMasterNotCarryTable.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/class-use/TestMasterNotCarryTable.html b/testdevapidocs/org/apache/hadoop/hbase/master/class-use/TestMasterNotCarryTable.html
new file mode 100644
index 0000000..b439678
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/class-use/TestMasterNotCarryTable.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.TestMasterNotCarryTable (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.TestMasterNotCarryTable (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/TestMasterNotCarryTable.html" title="class in org.apache.hadoop.hbase.master">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/class-use/TestMasterNotCarryTable.html" target="_top">Frames</a></li>
+<li><a href="TestMasterNotCarryTable.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.TestMasterNotCarryTable" class="title">Uses of Class<br>org.apache.hadoop.hbase.master.TestMasterNotCarryTable</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.master.TestMasterNotCarryTable</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/TestMasterNotCarryTable.html" title="class in org.apache.hadoop.hbase.master">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/class-use/TestMasterNotCarryTable.html" target="_top">Frames</a></li>
+<li><a href="TestMasterNotCarryTable.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/0f0847e0/testdevapidocs/org/apache/hadoop/hbase/master/package-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/package-frame.html b/testdevapidocs/org/apache/hadoop/hbase/master/package-frame.html
index 437b713..8a71939 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/package-frame.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/package-frame.html
@@ -56,6 +56,7 @@
 <li><a href="TestMasterMetrics.MyMaster.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">TestMasterMetrics.MyMaster</a></li>
 <li><a href="TestMasterMetricsWrapper.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">TestMasterMetricsWrapper</a></li>
 <li><a href="TestMasterNoCluster.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">TestMasterNoCluster</a></li>
+<li><a href="TestMasterNotCarryTable.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">TestMasterNotCarryTable</a></li>
 <li><a href="TestMasterOperationsForRegionReplicas.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">TestMasterOperationsForRegionReplicas</a></li>
 <li><a href="TestMasterQosFunction.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">TestMasterQosFunction</a></li>
 <li><a href="TestMasterRepairMode.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">TestMasterRepairMode</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/testdevapidocs/org/apache/hadoop/hbase/master/package-summary.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/package-summary.html b/testdevapidocs/org/apache/hadoop/hbase/master/package-summary.html
index ee288d0..8fdb419 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/package-summary.html
@@ -275,147 +275,151 @@
 </td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.html" title="class in org.apache.hadoop.hbase.master">TestMasterOperationsForRegionReplicas</a></td>
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html" title="class in org.apache.hadoop.hbase.master">TestMasterNotCarryTable</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterQosFunction.html" title="class in org.apache.hadoop.hbase.master">TestMasterQosFunction</a></td>
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.html" title="class in org.apache.hadoop.hbase.master">TestMasterOperationsForRegionReplicas</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterRepairMode.html" title="class in org.apache.hadoop.hbase.master">TestMasterRepairMode</a></td>
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterQosFunction.html" title="class in org.apache.hadoop.hbase.master">TestMasterQosFunction</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterRestartAfterDisablingTable.html" title="class in org.apache.hadoop.hbase.master">TestMasterRestartAfterDisablingTable</a></td>
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterRepairMode.html" title="class in org.apache.hadoop.hbase.master">TestMasterRepairMode</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterShutdown.html" title="class in org.apache.hadoop.hbase.master">TestMasterShutdown</a></td>
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterRestartAfterDisablingTable.html" title="class in org.apache.hadoop.hbase.master">TestMasterRestartAfterDisablingTable</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterShutdown.html" title="class in org.apache.hadoop.hbase.master">TestMasterShutdown</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterStatusServlet.html" title="class in org.apache.hadoop.hbase.master">TestMasterStatusServlet</a></td>
 <td class="colLast">
 <div class="block">Tests for the master status page and its template.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterTransitions.html" title="class in org.apache.hadoop.hbase.master">TestMasterTransitions</a></td>
 <td class="colLast">
 <div class="block">Test transitions of state across the master.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestMergeTableRegionsWhileRSCrash.html" title="class in org.apache.hadoop.hbase.master">TestMergeTableRegionsWhileRSCrash</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.html" title="class in org.apache.hadoop.hbase.master">TestMetaAssignmentWithStopMaster</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaShutdownHandler.html" title="class in org.apache.hadoop.hbase.master">TestMetaShutdownHandler</a></td>
 <td class="colLast">
 <div class="block">Tests handling of meta-carrying region server failover.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaShutdownHandler.MyRegionServer.html" title="class in org.apache.hadoop.hbase.master">TestMetaShutdownHandler.MyRegionServer</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetricsMasterProcSourceImpl.html" title="class in org.apache.hadoop.hbase.master">TestMetricsMasterProcSourceImpl</a></td>
 <td class="colLast">
 <div class="block">Test for MetricsMasterProcSourceImpl</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetricsMasterSourceFactory.html" title="class in org.apache.hadoop.hbase.master">TestMetricsMasterSourceFactory</a></td>
 <td class="colLast">
 <div class="block">Test for the CompatibilitySingletonFactory and building MetricsMasterSource</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetricsMasterSourceImpl.html" title="class in org.apache.hadoop.hbase.master">TestMetricsMasterSourceImpl</a></td>
 <td class="colLast">
 <div class="block">Test for MetricsMasterSourceImpl</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestMirroringTableStateManager.html" title="class in org.apache.hadoop.hbase.master">TestMirroringTableStateManager</a></td>
 <td class="colLast">
 <div class="block">Tests that table state is mirrored out to zookeeper for hbase-1.x clients.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestRegionPlacement.html" title="class in org.apache.hadoop.hbase.master">TestRegionPlacement</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestRegionPlacement2.html" title="class in org.apache.hadoop.hbase.master">TestRegionPlacement2</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestRegionPlan.html" title="class in org.apache.hadoop.hbase.master">TestRegionPlan</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestRegionState.html" title="class in org.apache.hadoop.hbase.master">TestRegionState</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestRestartCluster.html" title="class in org.apache.hadoop.hbase.master">TestRestartCluster</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestRollingRestart.html" title="class in org.apache.hadoop.hbase.master">TestRollingRestart</a></td>
 <td class="colLast">
 <div class="block">Tests the restarting of everything as done during rolling restarts.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestServerCrashProcedureCarryingMetaStuck.html" title="class in org.apache.hadoop.hbase.master">TestServerCrashProcedureCarryingMetaStuck</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestServerCrashProcedureStuck.html" title="class in org.apache.hadoop.hbase.master">TestServerCrashProcedureStuck</a></td>
 <td class="colLast">
 <div class="block">Testcase for HBASE-20634</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestShutdownBackupMaster.html" title="class in org.apache.hadoop.hbase.master">TestShutdownBackupMaster</a></td>
 <td class="colLast">
 <div class="block">Test to confirm that we will not hang when stop a backup master which is trying to become the
  active master.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestShutdownBackupMaster.MockHMaster.html" title="class in org.apache.hadoop.hbase.master">TestShutdownBackupMaster.MockHMaster</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestShutdownWithNoRegionServer.html" title="class in org.apache.hadoop.hbase.master">TestShutdownWithNoRegionServer</a></td>
 <td class="colLast">
 <div class="block">Testcase to confirm that we will not hang when shutdown a cluster with no live region servers.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestSplitLogManager.html" title="class in org.apache.hadoop.hbase.master">TestSplitLogManager</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestSplitRegionWhileRSCrash.html" title="class in org.apache.hadoop.hbase.master">TestSplitRegionWhileRSCrash</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestTableStateManager.html" title="class in org.apache.hadoop.hbase.master">TestTableStateManager</a></td>
 <td class="colLast">
 <div class="block">Tests the default table lock manager</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestWarmupRegion.html" title="class in org.apache.hadoop.hbase.master">TestWarmupRegion</a></td>
 <td class="colLast">
 <div class="block">Run tests that use the HBase clients; <code>HTable</code>.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/testdevapidocs/org/apache/hadoop/hbase/master/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/master/package-tree.html
index bf9125b..5b04558 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -165,6 +165,7 @@
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/TestMasterMetrics.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestMasterMetrics</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/TestMasterMetricsWrapper.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestMasterMetricsWrapper</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/TestMasterNoCluster.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestMasterNoCluster</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestMasterNotCarryTable</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestMasterOperationsForRegionReplicas</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/TestMasterRepairMode.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestMasterRepairMode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/TestMasterRestartAfterDisablingTable.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestMasterRestartAfterDisablingTable</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/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 3b3fbdd..32c400b 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/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/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/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.Service.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.Service</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.ACTION.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestDDLMasterFailover.ACTION</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/0f0847e0/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
index a1c9b1d..28973e0 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
@@ -81,14 +81,14 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Object</span></a>
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure.Procedure (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;V&gt;, org.apache.hadoop.hbase.errorhandling.ForeignExceptionListener)
+<li type="circle">org.apache.hadoop.hbase.procedure2.Procedure&lt;TEnvironment&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedure.LatchedProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedure.LatchedProcedure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedureDescriber.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedureDescriber.TestProcedure</span></a></li>
 </ul>
 </li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.Procedure&lt;TEnvironment&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;)
+<li type="circle">org.apache.hadoop.hbase.procedure.Procedure (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;V&gt;, org.apache.hadoop.hbase.errorhandling.ForeignExceptionListener)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedureDescriber.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedureDescriber.TestProcedure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedure.LatchedProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedure.LatchedProcedure</span></a></li>
 </ul>
 </li>
 <li type="circle">org.apache.hadoop.hbase.procedure.ProcedureManager

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/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 00632cf..67ad9b3 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/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
 <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/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/TestMultiLogThreshold.ActionType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestMultiLogThreshold.ActionType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
+<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>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/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 b21ae88..fa9e769 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -141,8 +141,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/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>
+<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/FaultyFSLog.FailureType.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">FaultyFSLog.FailureType</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/testdevapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/overview-tree.html b/testdevapidocs/overview-tree.html
index e55d4f3..579ba90 100644
--- a/testdevapidocs/overview-tree.html
+++ b/testdevapidocs/overview-tree.html
@@ -3103,6 +3103,7 @@
 <li type="circle">org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterMetrics.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestMasterMetrics</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterMetricsWrapper.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestMasterMetricsWrapper</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterNoCluster.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestMasterNoCluster</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestMasterNotCarryTable</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">TestMasterObserver</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">TestMasterObserver.CPMasterObserver</span></a> (implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.hadoop.hbase.coprocessor.MasterObserver)</li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestMasterObserverPostCalls.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TestMasterObserverPostCalls</span></a></li>


[12/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.StatisticsThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.StatisticsThread.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.StatisticsThread.html
index 21f7b0f..6a5ac20 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.StatisticsThread.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.StatisticsThread.html
@@ -143,511 +143,512 @@
 <span class="sourceLineNo">135</span>    return instance;<a name="line.135"></a>
 <span class="sourceLineNo">136</span>  }<a name="line.136"></a>
 <span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>  static ChunkCreator getInstance() {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    return instance;<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>  /**<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * Creates and inits a chunk. The default implementation for a specific chunk size.<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * @return the chunk that was initialized<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   */<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  Chunk getChunk(ChunkType chunkType) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    return getChunk(CompactingMemStore.IndexType.ARRAY_MAP, chunkType);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>  /**<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * Creates and inits a chunk. The default implementation.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * @return the chunk that was initialized<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   */<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  Chunk getChunk() {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    return getChunk(CompactingMemStore.IndexType.ARRAY_MAP, ChunkType.DATA_CHUNK);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  }<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>   * Creates and inits a chunk. The default implementation for a specific index type.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * @return the chunk that was initialized<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   */<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  Chunk getChunk(CompactingMemStore.IndexType chunkIndexType) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    return getChunk(chunkIndexType, ChunkType.DATA_CHUNK);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>  /**<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   * Creates and inits a chunk with specific index type and type.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * @return the chunk that was initialized<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   */<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  Chunk getChunk(CompactingMemStore.IndexType chunkIndexType, ChunkType chunkType) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    switch (chunkType) {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      case INDEX_CHUNK:<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        if (indexChunksPool != null) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>          return getChunk(chunkIndexType, indexChunksPool.getChunkSize());<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        }<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      case DATA_CHUNK:<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        if (dataChunksPool == null) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>          return getChunk(chunkIndexType, chunkSize);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        } else {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>          return getChunk(chunkIndexType, dataChunksPool.getChunkSize());<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        }<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      default:<a name="line.182"></a>
-<span class="sourceLineNo">183</span>        throw new IllegalArgumentException(<a name="line.183"></a>
-<span class="sourceLineNo">184</span>                "chunkType must either be INDEX_CHUNK or DATA_CHUNK");<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>  }<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>  /**<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   * Creates and inits a chunk.<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * @return the chunk that was initialized<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * @param chunkIndexType whether the requested chunk is going to be used with CellChunkMap index<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * @param size the size of the chunk to be allocated, in bytes<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   */<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  Chunk getChunk(CompactingMemStore.IndexType chunkIndexType, int size) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    Chunk chunk = null;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    MemStoreChunkPool pool = null;<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // if the size is suitable for one of the pools<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    if (dataChunksPool != null &amp;&amp; size == dataChunksPool.getChunkSize()) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      pool = dataChunksPool;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    } else if (indexChunksPool != null &amp;&amp; size == indexChunksPool.getChunkSize()) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      pool = indexChunksPool;<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>    // if we have a pool<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    if (pool != null) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      //  the pool creates the chunk internally. The chunk#init() call happens here<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      chunk = pool.getChunk();<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      // the pool has run out of maxCount<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      if (chunk == null) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        if (LOG.isTraceEnabled()) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          LOG.trace("The chunk pool is full. Reached maxCount= " + pool.getMaxCount()<a name="line.212"></a>
-<span class="sourceLineNo">213</span>                  + ". Creating chunk onheap.");<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        }<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      }<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>    if (chunk == null) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      // the second parameter explains whether CellChunkMap index is requested,<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // in that case, put allocated on demand chunk mapping into chunkIdMap<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      chunk = createChunk(false, chunkIndexType, size);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>    // now we need to actually do the expensive memory allocation step in case of a new chunk,<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    // else only the offset is set to the beginning of the chunk to accept allocations<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    chunk.init();<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    return chunk;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>  }<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>  /**<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   * Creates and inits a chunk of a special size, bigger than a regular chunk size.<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   * Such a chunk will never come from pool and will always be on demand allocated.<a name="line.232"></a>
-<span class="sourceLineNo">233</span>   * @return the chunk that was initialized<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * @param jumboSize the special size to be used<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  Chunk getJumboChunk(int jumboSize) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    int allocSize = jumboSize + SIZEOF_CHUNK_HEADER;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    if (allocSize &lt;= dataChunksPool.getChunkSize()) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      LOG.warn("Jumbo chunk size " + jumboSize + " must be more than regular chunk size "<a name="line.239"></a>
-<span class="sourceLineNo">240</span>              + dataChunksPool.getChunkSize() + ". Converting to regular chunk.");<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      return getChunk(CompactingMemStore.IndexType.CHUNK_MAP);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    }<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    // the new chunk is going to hold the jumbo cell data and needs to be referenced by<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    // a strong map. Therefore the CCM index type<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    return getChunk(CompactingMemStore.IndexType.CHUNK_MAP, allocSize);<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>  /**<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   * Creates the chunk either onheap or offheap<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   * @param pool indicates if the chunks have to be created which will be used by the Pool<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * @param chunkIndexType whether the requested chunk is going to be used with CellChunkMap index<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   * @param size the size of the chunk to be allocated, in bytes<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   * @return the chunk<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  private Chunk createChunk(boolean pool, CompactingMemStore.IndexType chunkIndexType, int size) {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    Chunk chunk = null;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    int id = chunkID.getAndIncrement();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    assert id &gt; 0;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    // do not create offheap chunk on demand<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (pool &amp;&amp; this.offheap) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      chunk = new OffheapChunk(size, id, pool);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    } else {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      chunk = new OnheapChunk(size, id, pool);<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    if (pool || (chunkIndexType == CompactingMemStore.IndexType.CHUNK_MAP)) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      // put the pool chunk into the chunkIdMap so it is not GC-ed<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      this.chunkIdMap.put(chunk.getId(), chunk);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    }<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    return chunk;<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>  // Chunks from pool are created covered with strong references anyway<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  // TODO: change to CHUNK_MAP if it is generally defined<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  private Chunk createChunkForPool(CompactingMemStore.IndexType chunkIndexType, int chunkSize) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    if (chunkSize != dataChunksPool.getChunkSize() &amp;&amp;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>            chunkSize != indexChunksPool.getChunkSize()) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      return null;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    }<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    return createChunk(true, chunkIndexType, chunkSize);<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>  @VisibleForTesting<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    // Used to translate the ChunkID into a chunk ref<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  Chunk getChunk(int id) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    // can return null if chunk was never mapped<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    return chunkIdMap.get(id);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  }<a name="line.287"></a>
-<span class="sourceLineNo">288</span><a name="line.288"></a>
-<span class="sourceLineNo">289</span>  boolean isOffheap() {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    return this.offheap;<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>  private void removeChunks(Set&lt;Integer&gt; chunkIDs) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    this.chunkIdMap.keySet().removeAll(chunkIDs);<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>  Chunk removeChunk(int chunkId) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    return this.chunkIdMap.remove(chunkId);<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>  @VisibleForTesting<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    // the chunks in the chunkIdMap may already be released so we shouldn't relay<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    // on this counting for strong correctness. This method is used only in testing.<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  int numberOfMappedChunks() {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    return this.chunkIdMap.size();<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>  @VisibleForTesting<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  void clearChunkIds() {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    this.chunkIdMap.clear();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  }<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span>  /**<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * A pool of {@link Chunk} instances.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   *<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   * MemStoreChunkPool caches a number of retired chunks for reusing, it could<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   * decrease allocating bytes when writing, thereby optimizing the garbage<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * collection on JVM.<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private  class MemStoreChunkPool implements HeapMemoryTuneObserver {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    private final int chunkSize;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    private int maxCount;<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    // A queue of reclaimed chunks<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    private final BlockingQueue&lt;Chunk&gt; reclaimedChunks;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private final float poolSizePercentage;<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>    /** Statistics thread schedule pool */<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    private final ScheduledExecutorService scheduleThreadPool;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    /** Statistics thread */<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    private static final int statThreadPeriod = 60 * 5;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    private final AtomicLong chunkCount = new AtomicLong();<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    private final LongAdder reusedChunkCount = new LongAdder();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    private final String label;<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>    MemStoreChunkPool(String label, int chunkSize, int maxCount, int initialCount,<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        float poolSizePercentage) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      this.label = label;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      this.chunkSize = chunkSize;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      this.maxCount = maxCount;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.poolSizePercentage = poolSizePercentage;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.reclaimedChunks = new LinkedBlockingQueue&lt;&gt;();<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      for (int i = 0; i &lt; initialCount; i++) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        Chunk chunk = createChunk(true, CompactingMemStore.IndexType.ARRAY_MAP, chunkSize);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        chunk.init();<a name="line.345"></a>
-<span class="sourceLineNo">346</span>        reclaimedChunks.add(chunk);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      }<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      chunkCount.set(initialCount);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      final String n = Thread.currentThread().getName();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      scheduleThreadPool = Executors.newScheduledThreadPool(1, new ThreadFactoryBuilder()<a name="line.350"></a>
-<span class="sourceLineNo">351</span>              .setNameFormat(n + "-MemStoreChunkPool Statistics").setDaemon(true).build());<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      this.scheduleThreadPool.scheduleAtFixedRate(new StatisticsThread(), statThreadPeriod,<a name="line.352"></a>
-<span class="sourceLineNo">353</span>              statThreadPeriod, TimeUnit.SECONDS);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>    /**<a name="line.356"></a>
-<span class="sourceLineNo">357</span>     * Poll a chunk from the pool, reset it if not null, else create a new chunk to return if we have<a name="line.357"></a>
-<span class="sourceLineNo">358</span>     * not yet created max allowed chunks count. When we have already created max allowed chunks and<a name="line.358"></a>
-<span class="sourceLineNo">359</span>     * no free chunks as of now, return null. It is the responsibility of the caller to make a chunk<a name="line.359"></a>
-<span class="sourceLineNo">360</span>     * then.<a name="line.360"></a>
-<span class="sourceLineNo">361</span>     * Note: Chunks returned by this pool must be put back to the pool after its use.<a name="line.361"></a>
-<span class="sourceLineNo">362</span>     * @return a chunk<a name="line.362"></a>
-<span class="sourceLineNo">363</span>     * @see #putbackChunks(Chunk)<a name="line.363"></a>
-<span class="sourceLineNo">364</span>     */<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    Chunk getChunk() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      return getChunk(CompactingMemStore.IndexType.ARRAY_MAP);<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>    Chunk getChunk(CompactingMemStore.IndexType chunkIndexType) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      Chunk chunk = reclaimedChunks.poll();<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      if (chunk != null) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        chunk.reset();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        reusedChunkCount.increment();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      } else {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        // Make a chunk iff we have not yet created the maxCount chunks<a name="line.375"></a>
-<span class="sourceLineNo">376</span>        while (true) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          long created = this.chunkCount.get();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          if (created &lt; this.maxCount) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>            if (this.chunkCount.compareAndSet(created, created + 1)) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>              chunk = createChunkForPool(chunkIndexType, chunkSize);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>              break;<a name="line.381"></a>
-<span class="sourceLineNo">382</span>            }<a name="line.382"></a>
-<span class="sourceLineNo">383</span>          } else {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>            break;<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>
-<span class="sourceLineNo">387</span>      }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      return chunk;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>    int getChunkSize() {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      return chunkSize;<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>    /**<a name="line.395"></a>
-<span class="sourceLineNo">396</span>     * Add the chunks to the pool, when the pool achieves the max size, it will skip the remaining<a name="line.396"></a>
-<span class="sourceLineNo">397</span>     * chunks<a name="line.397"></a>
-<span class="sourceLineNo">398</span>     * @param c<a name="line.398"></a>
-<span class="sourceLineNo">399</span>     */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    private void putbackChunks(Chunk c) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      int toAdd = this.maxCount - reclaimedChunks.size();<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      if (c.isFromPool() &amp;&amp; c.size == chunkSize &amp;&amp; toAdd &gt; 0) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        reclaimedChunks.add(c);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      } else {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        // remove the chunk (that is not going to pool)<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        // though it is initially from the pool or not<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        ChunkCreator.this.removeChunk(c.getId());<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    }<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    private class StatisticsThread extends Thread {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      StatisticsThread() {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        super("MemStoreChunkPool.StatisticsThread");<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        setDaemon(true);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      }<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>      @Override<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      public void run() {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>        logStats();<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>      private void logStats() {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        if (!LOG.isDebugEnabled()) return;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        long created = chunkCount.get();<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        long reused = reusedChunkCount.sum();<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        long total = created + reused;<a name="line.426"></a>
-<span class="sourceLineNo">427</span>        LOG.debug("{} stats (chunk size={}): current pool size={}, created chunk count={}, " +<a name="line.427"></a>
-<span class="sourceLineNo">428</span>                "reused chunk count={}, reuseRatio={}", label, chunkSize, reclaimedChunks.size(),<a name="line.428"></a>
-<span class="sourceLineNo">429</span>            created, reused,<a name="line.429"></a>
-<span class="sourceLineNo">430</span>            (total == 0? "0": StringUtils.formatPercent((float)reused/(float)total,2)));<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    private int getMaxCount() {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      return this.maxCount;<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    @Override<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    public void onHeapMemoryTune(long newMemstoreSize, long newBlockCacheSize) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      // don't do any tuning in case of offheap memstore<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      if (isOffheap()) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        LOG.warn("{} not tuning the chunk pool as it is offheap", label);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>        return;<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      int newMaxCount =<a name="line.445"></a>
-<span class="sourceLineNo">446</span>              (int) (newMemstoreSize * poolSizePercentage / getChunkSize());<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      if (newMaxCount != this.maxCount) {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>        // We need an adjustment in the chunks numbers<a name="line.448"></a>
-<span class="sourceLineNo">449</span>        if (newMaxCount &gt; this.maxCount) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>          // Max chunks getting increased. Just change the variable. Later calls to getChunk() would<a name="line.450"></a>
-<span class="sourceLineNo">451</span>          // create and add them to Q<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          LOG.info("{} max count for chunks increased from {} to {}", this.label, this.maxCount,<a name="line.452"></a>
-<span class="sourceLineNo">453</span>              newMaxCount);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          this.maxCount = newMaxCount;<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        } else {<a name="line.455"></a>
-<span class="sourceLineNo">456</span>          // Max chunks getting decreased. We may need to clear off some of the pooled chunks now<a name="line.456"></a>
-<span class="sourceLineNo">457</span>          // itself. If the extra chunks are serving already, do not pool those when we get them back<a name="line.457"></a>
-<span class="sourceLineNo">458</span>          LOG.info("{} max count for chunks decreased from {} to {}", this.label, this.maxCount,<a name="line.458"></a>
-<span class="sourceLineNo">459</span>              newMaxCount);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          this.maxCount = newMaxCount;<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          if (this.reclaimedChunks.size() &gt; newMaxCount) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>            synchronized (this) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>              while (this.reclaimedChunks.size() &gt; newMaxCount) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>                this.reclaimedChunks.poll();<a name="line.464"></a>
-<span class="sourceLineNo">465</span>              }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>            }<a name="line.466"></a>
-<span class="sourceLineNo">467</span>          }<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        }<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>  }<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>  @VisibleForTesting<a name="line.473"></a>
-<span class="sourceLineNo">474</span>  static void clearDisableFlag() {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    chunkPoolDisabled = false;<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  private MemStoreChunkPool initializePool(String label, long globalMemStoreSize,<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      float poolSizePercentage, float initialCountPercentage, int chunkSize,<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      HeapMemoryManager heapMemoryManager) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    if (poolSizePercentage &lt;= 0) {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      LOG.info("{} poolSizePercentage is less than 0. So not using pool", label);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      return null;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    if (chunkPoolDisabled) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      return null;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    if (poolSizePercentage &gt; 1.0) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      throw new IllegalArgumentException(<a name="line.489"></a>
-<span class="sourceLineNo">490</span>              MemStoreLAB.CHUNK_POOL_MAXSIZE_KEY + " must be between 0.0 and 1.0");<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    int maxCount = (int) (globalMemStoreSize * poolSizePercentage / chunkSize);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    if (initialCountPercentage &gt; 1.0 || initialCountPercentage &lt; 0) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      throw new IllegalArgumentException(label + " " + MemStoreLAB.CHUNK_POOL_INITIALSIZE_KEY +<a name="line.494"></a>
-<span class="sourceLineNo">495</span>          " must be between 0.0 and 1.0");<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    }<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    int initialCount = (int) (initialCountPercentage * maxCount);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    LOG.info("Allocating {} MemStoreChunkPool with chunk size {}, max count {}, initial count {}",<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        label, StringUtils.byteDesc(chunkSize), maxCount, initialCount);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    MemStoreChunkPool memStoreChunkPool = new MemStoreChunkPool(label, chunkSize, maxCount,<a name="line.500"></a>
-<span class="sourceLineNo">501</span>            initialCount, poolSizePercentage);<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    if (heapMemoryManager != null &amp;&amp; memStoreChunkPool != null) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      // Register with Heap Memory manager<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      heapMemoryManager.registerTuneObserver(memStoreChunkPool);<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    return memStoreChunkPool;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>  }<a name="line.507"></a>
-<span class="sourceLineNo">508</span><a name="line.508"></a>
-<span class="sourceLineNo">509</span>  @VisibleForTesting<a name="line.509"></a>
-<span class="sourceLineNo">510</span>  int getMaxCount() {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    return getMaxCount(ChunkType.DATA_CHUNK);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>  }<a name="line.512"></a>
-<span class="sourceLineNo">513</span><a name="line.513"></a>
-<span class="sourceLineNo">514</span>  @VisibleForTesting<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  int getMaxCount(ChunkType chunkType) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    switch (chunkType) {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      case INDEX_CHUNK:<a name="line.517"></a>
-<span class="sourceLineNo">518</span>        if (indexChunksPool != null) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          return indexChunksPool.getMaxCount();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        }<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        break;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      case DATA_CHUNK:<a name="line.522"></a>
-<span class="sourceLineNo">523</span>        if (dataChunksPool != null) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          return dataChunksPool.getMaxCount();<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>        break;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      default:<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        throw new IllegalArgumentException(<a name="line.528"></a>
-<span class="sourceLineNo">529</span>                "chunkType must either be INDEX_CHUNK or DATA_CHUNK");<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    return 0;<a name="line.532"></a>
-<span class="sourceLineNo">533</span>  }<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>  @VisibleForTesting<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  int getPoolSize() {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    return getPoolSize(ChunkType.DATA_CHUNK);<a name="line.537"></a>
-<span class="sourceLineNo">538</span>  }<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>  @VisibleForTesting<a name="line.540"></a>
-<span class="sourceLineNo">541</span>  int getPoolSize(ChunkType chunkType) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    switch (chunkType) {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      case INDEX_CHUNK:<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        if (indexChunksPool != null) {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>          return indexChunksPool.reclaimedChunks.size();<a name="line.545"></a>
-<span class="sourceLineNo">546</span>        }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>        break;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      case DATA_CHUNK:<a name="line.548"></a>
-<span class="sourceLineNo">549</span>        if (dataChunksPool != null) {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>          return dataChunksPool.reclaimedChunks.size();<a name="line.550"></a>
-<span class="sourceLineNo">551</span>        }<a name="line.551"></a>
-<span class="sourceLineNo">552</span>        break;<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      default:<a name="line.553"></a>
-<span class="sourceLineNo">554</span>        throw new IllegalArgumentException(<a name="line.554"></a>
-<span class="sourceLineNo">555</span>                "chunkType must either be INDEX_CHUNK or DATA_CHUNK");<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    }<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    return 0;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>  @VisibleForTesting<a name="line.560"></a>
-<span class="sourceLineNo">561</span>  boolean isChunkInPool(int chunkId) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    Chunk c = getChunk(chunkId);<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    if (c==null) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      return false;<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    }<a name="line.565"></a>
-<span class="sourceLineNo">566</span><a name="line.566"></a>
-<span class="sourceLineNo">567</span>    // chunks that are from pool will return true chunk reference not null<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    if (dataChunksPool != null &amp;&amp; dataChunksPool.reclaimedChunks.contains(c)) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      return true;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    } else if (indexChunksPool != null &amp;&amp; indexChunksPool.reclaimedChunks.contains(c)) {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      return true;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    }<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    return false;<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  }<a name="line.574"></a>
-<span class="sourceLineNo">575</span><a name="line.575"></a>
-<span class="sourceLineNo">576</span>  /*<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   * Only used in testing<a name="line.577"></a>
-<span class="sourceLineNo">578</span>   */<a name="line.578"></a>
-<span class="sourceLineNo">579</span>  @VisibleForTesting<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  void clearChunksInPool() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    if (dataChunksPool != null) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      dataChunksPool.reclaimedChunks.clear();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    }<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    if (indexChunksPool != null) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      indexChunksPool.reclaimedChunks.clear();<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    }<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  }<a name="line.587"></a>
-<span class="sourceLineNo">588</span><a name="line.588"></a>
-<span class="sourceLineNo">589</span>  int getChunkSize() {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    return getChunkSize(ChunkType.DATA_CHUNK);<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  }<a name="line.591"></a>
-<span class="sourceLineNo">592</span><a name="line.592"></a>
-<span class="sourceLineNo">593</span>  int getChunkSize(ChunkType chunkType) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    switch (chunkType) {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      case INDEX_CHUNK:<a name="line.595"></a>
-<span class="sourceLineNo">596</span>        if (indexChunksPool != null) {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>          return indexChunksPool.getChunkSize();<a name="line.597"></a>
-<span class="sourceLineNo">598</span>        }<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      case DATA_CHUNK:<a name="line.599"></a>
-<span class="sourceLineNo">600</span>        if (dataChunksPool != null) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>          return dataChunksPool.getChunkSize();<a name="line.601"></a>
-<span class="sourceLineNo">602</span>        } else { // When pools are empty<a name="line.602"></a>
-<span class="sourceLineNo">603</span>          return chunkSize;<a name="line.603"></a>
-<span class="sourceLineNo">604</span>        }<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      default:<a name="line.605"></a>
-<span class="sourceLineNo">606</span>        throw new IllegalArgumentException(<a name="line.606"></a>
-<span class="sourceLineNo">607</span>                "chunkType must either be INDEX_CHUNK or DATA_CHUNK");<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>  }<a name="line.609"></a>
-<span class="sourceLineNo">610</span><a name="line.610"></a>
-<span class="sourceLineNo">611</span>  synchronized void putbackChunks(Set&lt;Integer&gt; chunks) {<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    // if there is no pool just try to clear the chunkIdMap in case there is something<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    if (dataChunksPool == null &amp;&amp; indexChunksPool == null) {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      this.removeChunks(chunks);<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      return;<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    }<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>    // if there is a pool, go over all chunk IDs that came back, the chunks may be from pool or not<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    for (int chunkID : chunks) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      // translate chunk ID to chunk, if chunk initially wasn't in pool<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      // this translation will (most likely) return null<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      Chunk chunk = ChunkCreator.this.getChunk(chunkID);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      if (chunk != null) {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>        if (chunk.isFromPool() &amp;&amp; chunk.isIndexChunk()) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>          indexChunksPool.putbackChunks(chunk);<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        } else if (chunk.isFromPool() &amp;&amp; chunk.size == dataChunksPool.getChunkSize()) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>          dataChunksPool.putbackChunks(chunk);<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        } else {<a name="line.628"></a>
-<span class="sourceLineNo">629</span>          // chunks which are not from one of the pools<a name="line.629"></a>
-<span class="sourceLineNo">630</span>          // should be released without going to the pools.<a name="line.630"></a>
-<span class="sourceLineNo">631</span>          // Removing them from chunkIdMap will cause their removal by the GC.<a name="line.631"></a>
-<span class="sourceLineNo">632</span>          this.removeChunk(chunkID);<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      }<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      // if chunk is null, it was never covered by the chunkIdMap (and so wasn't in pool also),<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      // so we have nothing to do on its release<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    }<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    return;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>  }<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span>}<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
+<span class="sourceLineNo">138</span>  @VisibleForTesting<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  public static ChunkCreator getInstance() {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    return instance;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  }<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>  /**<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * Creates and inits a chunk. The default implementation for a specific chunk size.<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * @return the chunk that was initialized<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   */<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  Chunk getChunk(ChunkType chunkType) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    return getChunk(CompactingMemStore.IndexType.ARRAY_MAP, chunkType);<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  }<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>  /**<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * Creates and inits a chunk. The default implementation.<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * @return the chunk that was initialized<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  Chunk getChunk() {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    return getChunk(CompactingMemStore.IndexType.ARRAY_MAP, ChunkType.DATA_CHUNK);<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>  /**<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * Creates and inits a chunk. The default implementation for a specific index type.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * @return the chunk that was initialized<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   */<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  Chunk getChunk(CompactingMemStore.IndexType chunkIndexType) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    return getChunk(chunkIndexType, ChunkType.DATA_CHUNK);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>  /**<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * Creates and inits a chunk with specific index type and type.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * @return the chunk that was initialized<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   */<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  Chunk getChunk(CompactingMemStore.IndexType chunkIndexType, ChunkType chunkType) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    switch (chunkType) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      case INDEX_CHUNK:<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        if (indexChunksPool != null) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>          return getChunk(chunkIndexType, indexChunksPool.getChunkSize());<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        }<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      case DATA_CHUNK:<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        if (dataChunksPool == null) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          return getChunk(chunkIndexType, chunkSize);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        } else {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>          return getChunk(chunkIndexType, dataChunksPool.getChunkSize());<a name="line.181"></a>
+<span class="sourceLineNo">182</span>        }<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      default:<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        throw new IllegalArgumentException(<a name="line.184"></a>
+<span class="sourceLineNo">185</span>                "chunkType must either be INDEX_CHUNK or DATA_CHUNK");<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>
+<span class="sourceLineNo">189</span>  /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * Creates and inits a chunk.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * @return the chunk that was initialized<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   * @param chunkIndexType whether the requested chunk is going to be used with CellChunkMap index<a name="line.192"></a>
+<span class="sourceLineNo">193</span>   * @param size the size of the chunk to be allocated, in bytes<a name="line.193"></a>
+<span class="sourceLineNo">194</span>   */<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  Chunk getChunk(CompactingMemStore.IndexType chunkIndexType, int size) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    Chunk chunk = null;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    MemStoreChunkPool pool = null;<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>    // if the size is suitable for one of the pools<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    if (dataChunksPool != null &amp;&amp; size == dataChunksPool.getChunkSize()) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      pool = dataChunksPool;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    } else if (indexChunksPool != null &amp;&amp; size == indexChunksPool.getChunkSize()) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      pool = indexChunksPool;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>    // if we have a pool<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    if (pool != null) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      //  the pool creates the chunk internally. The chunk#init() call happens here<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      chunk = pool.getChunk();<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      // the pool has run out of maxCount<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      if (chunk == null) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        if (LOG.isTraceEnabled()) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>          LOG.trace("The chunk pool is full. Reached maxCount= " + pool.getMaxCount()<a name="line.213"></a>
+<span class="sourceLineNo">214</span>                  + ". Creating chunk onheap.");<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        }<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><a name="line.218"></a>
+<span class="sourceLineNo">219</span>    if (chunk == null) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      // the second parameter explains whether CellChunkMap index is requested,<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      // in that case, put allocated on demand chunk mapping into chunkIdMap<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      chunk = createChunk(false, chunkIndexType, size);<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>    // now we need to actually do the expensive memory allocation step in case of a new chunk,<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    // else only the offset is set to the beginning of the chunk to accept allocations<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    chunk.init();<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    return chunk;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>  /**<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * Creates and inits a chunk of a special size, bigger than a regular chunk size.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * Such a chunk will never come from pool and will always be on demand allocated.<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   * @return the chunk that was initialized<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   * @param jumboSize the special size to be used<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  Chunk getJumboChunk(int jumboSize) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    int allocSize = jumboSize + SIZEOF_CHUNK_HEADER;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    if (allocSize &lt;= dataChunksPool.getChunkSize()) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      LOG.warn("Jumbo chunk size " + jumboSize + " must be more than regular chunk size "<a name="line.240"></a>
+<span class="sourceLineNo">241</span>              + dataChunksPool.getChunkSize() + ". Converting to regular chunk.");<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      return getChunk(CompactingMemStore.IndexType.CHUNK_MAP);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    }<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    // the new chunk is going to hold the jumbo cell data and needs to be referenced by<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    // a strong map. Therefore the CCM index type<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    return getChunk(CompactingMemStore.IndexType.CHUNK_MAP, allocSize);<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>  /**<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * Creates the chunk either onheap or offheap<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   * @param pool indicates if the chunks have to be created which will be used by the Pool<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   * @param chunkIndexType whether the requested chunk is going to be used with CellChunkMap index<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   * @param size the size of the chunk to be allocated, in bytes<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * @return the chunk<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   */<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  private Chunk createChunk(boolean pool, CompactingMemStore.IndexType chunkIndexType, int size) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    Chunk chunk = null;<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    int id = chunkID.getAndIncrement();<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    assert id &gt; 0;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    // do not create offheap chunk on demand<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    if (pool &amp;&amp; this.offheap) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      chunk = new OffheapChunk(size, id, pool);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    } else {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      chunk = new OnheapChunk(size, id, pool);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    if (pool || (chunkIndexType == CompactingMemStore.IndexType.CHUNK_MAP)) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      // put the pool chunk into the chunkIdMap so it is not GC-ed<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      this.chunkIdMap.put(chunk.getId(), chunk);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    }<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    return chunk;<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>  // Chunks from pool are created covered with strong references anyway<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  // TODO: change to CHUNK_MAP if it is generally defined<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  private Chunk createChunkForPool(CompactingMemStore.IndexType chunkIndexType, int chunkSize) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    if (chunkSize != dataChunksPool.getChunkSize() &amp;&amp;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>            chunkSize != indexChunksPool.getChunkSize()) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      return null;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    return createChunk(true, chunkIndexType, chunkSize);<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>  @VisibleForTesting<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    // Used to translate the ChunkID into a chunk ref<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  Chunk getChunk(int id) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    // can return null if chunk was never mapped<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    return chunkIdMap.get(id);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>  }<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>  boolean isOffheap() {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    return this.offheap;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>  }<a name="line.292"></a>
+<span class="sourceLineNo">293</span><a name="line.293"></a>
+<span class="sourceLineNo">294</span>  private void removeChunks(Set&lt;Integer&gt; chunkIDs) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    this.chunkIdMap.keySet().removeAll(chunkIDs);<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>  Chunk removeChunk(int chunkId) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    return this.chunkIdMap.remove(chunkId);<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>  @VisibleForTesting<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    // the chunks in the chunkIdMap may already be released so we shouldn't relay<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    // on this counting for strong correctness. This method is used only in testing.<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  int numberOfMappedChunks() {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    return this.chunkIdMap.size();<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  }<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span>  @VisibleForTesting<a name="line.309"></a>
+<span class="sourceLineNo">310</span>  void clearChunkIds() {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    this.chunkIdMap.clear();<a name="line.311"></a>
+<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * A pool of {@link Chunk} instances.<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   *<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * MemStoreChunkPool caches a number of retired chunks for reusing, it could<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * decrease allocating bytes when writing, thereby optimizing the garbage<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   * collection on JVM.<a name="line.319"></a>
+<span class="sourceLineNo">320</span>   */<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  private  class MemStoreChunkPool implements HeapMemoryTuneObserver {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    private final int chunkSize;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    private int maxCount;<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    // A queue of reclaimed chunks<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    private final BlockingQueue&lt;Chunk&gt; reclaimedChunks;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    private final float poolSizePercentage;<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>    /** Statistics thread schedule pool */<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    private final ScheduledExecutorService scheduleThreadPool;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    /** Statistics thread */<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    private static final int statThreadPeriod = 60 * 5;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    private final AtomicLong chunkCount = new AtomicLong();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    private final LongAdder reusedChunkCount = new LongAdder();<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    private final String label;<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>    MemStoreChunkPool(String label, int chunkSize, int maxCount, int initialCount,<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        float poolSizePercentage) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      this.label = label;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      this.chunkSize = chunkSize;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      this.maxCount = maxCount;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      this.poolSizePercentage = poolSizePercentage;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.reclaimedChunks = new LinkedBlockingQueue&lt;&gt;();<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      for (int i = 0; i &lt; initialCount; i++) {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        Chunk chunk = createChunk(true, CompactingMemStore.IndexType.ARRAY_MAP, chunkSize);<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        chunk.init();<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        reclaimedChunks.add(chunk);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      }<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      chunkCount.set(initialCount);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      final String n = Thread.currentThread().getName();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      scheduleThreadPool = Executors.newScheduledThreadPool(1, new ThreadFactoryBuilder()<a name="line.351"></a>
+<span class="sourceLineNo">352</span>              .setNameFormat(n + "-MemStoreChunkPool Statistics").setDaemon(true).build());<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      this.scheduleThreadPool.scheduleAtFixedRate(new StatisticsThread(), statThreadPeriod,<a name="line.353"></a>
+<span class="sourceLineNo">354</span>              statThreadPeriod, TimeUnit.SECONDS);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    }<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span>     * Poll a chunk from the pool, reset it if not null, else create a new chunk to return if we have<a name="line.358"></a>
+<span class="sourceLineNo">359</span>     * not yet created max allowed chunks count. When we have already created max allowed chunks and<a name="line.359"></a>
+<span class="sourceLineNo">360</span>     * no free chunks as of now, return null. It is the responsibility of the caller to make a chunk<a name="line.360"></a>
+<span class="sourceLineNo">361</span>     * then.<a name="line.361"></a>
+<span class="sourceLineNo">362</span>     * Note: Chunks returned by this pool must be put back to the pool after its use.<a name="line.362"></a>
+<span class="sourceLineNo">363</span>     * @return a chunk<a name="line.363"></a>
+<span class="sourceLineNo">364</span>     * @see #putbackChunks(Chunk)<a name="line.364"></a>
+<span class="sourceLineNo">365</span>     */<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    Chunk getChunk() {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      return getChunk(CompactingMemStore.IndexType.ARRAY_MAP);<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>    Chunk getChunk(CompactingMemStore.IndexType chunkIndexType) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      Chunk chunk = reclaimedChunks.poll();<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      if (chunk != null) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        chunk.reset();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        reusedChunkCount.increment();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      } else {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        // Make a chunk iff we have not yet created the maxCount chunks<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        while (true) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>          long created = this.chunkCount.get();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>          if (created &lt; this.maxCount) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>            if (this.chunkCount.compareAndSet(created, created + 1)) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>              chunk = createChunkForPool(chunkIndexType, chunkSize);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>              break;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>            }<a name="line.383"></a>
+<span class="sourceLineNo">384</span>          } else {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>            break;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>          }<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>      return chunk;<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>    int getChunkSize() {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      return chunkSize;<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>    /**<a name="line.396"></a>
+<span class="sourceLineNo">397</span>     * Add the chunks to the pool, when the pool achieves the max size, it will skip the remaining<a name="line.397"></a>
+<span class="sourceLineNo">398</span>     * chunks<a name="line.398"></a>
+<span class="sourceLineNo">399</span>     * @param c<a name="line.399"></a>
+<span class="sourceLineNo">400</span>     */<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    private void putbackChunks(Chunk c) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      int toAdd = this.maxCount - reclaimedChunks.size();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      if (c.isFromPool() &amp;&amp; c.size == chunkSize &amp;&amp; toAdd &gt; 0) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        reclaimedChunks.add(c);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      } else {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        // remove the chunk (that is not going to pool)<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        // though it is initially from the pool or not<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        ChunkCreator.this.removeChunk(c.getId());<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      }<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    }<a name="line.410"></a>
+<span class="sourceLineNo">411</span><a name="line.411"></a>
+<span class="sourceLineNo">412</span>    private class StatisticsThread extends Thread {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      StatisticsThread() {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        super("MemStoreChunkPool.StatisticsThread");<a name="line.414"></a>
+<span class="sourceLineNo">415</span>        setDaemon(true);<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      }<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span>      @Override<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      public void run() {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        logStats();<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      }<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>      private void logStats() {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        if (!LOG.isDebugEnabled()) return;<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        long created = chunkCount.get();<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        long reused = reusedChunkCount.sum();<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        long total = created + reused;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        LOG.debug("{} stats (chunk size={}): current pool size={}, created chunk count={}, " +<a name="line.428"></a>
+<span class="sourceLineNo">429</span>                "reused chunk count={}, reuseRatio={}", label, chunkSize, reclaimedChunks.size(),<a name="line.429"></a>
+<span class="sourceLineNo">430</span>            created, reused,<a name="line.430"></a>
+<span class="sourceLineNo">431</span>            (total == 0? "0": StringUtils.formatPercent((float)reused/(float)total,2)));<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>    private int getMaxCount() {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      return this.maxCount;<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    }<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>    @Override<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    public void onHeapMemoryTune(long newMemstoreSize, long newBlockCacheSize) {<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      // don't do any tuning in case of offheap memstore<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      if (isOffheap()) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        LOG.warn("{} not tuning the chunk pool as it is offheap", label);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>        return;<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      }<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      int newMaxCount =<a name="line.446"></a>
+<span class="sourceLineNo">447</span>              (int) (newMemstoreSize * poolSizePercentage / getChunkSize());<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      if (newMaxCount != this.maxCount) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>        // We need an adjustment in the chunks numbers<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        if (newMaxCount &gt; this.maxCount) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>          // Max chunks getting increased. Just change the variable. Later calls to getChunk() would<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          // create and add them to Q<a name="line.452"></a>
+<span class="sourceLineNo">453</span>          LOG.info("{} max count for chunks increased from {} to {}", this.label, this.maxCount,<a name="line.453"></a>
+<span class="sourceLineNo">454</span>              newMaxCount);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          this.maxCount = newMaxCount;<a name="line.455"></a>
+<span class="sourceLineNo">456</span>        } else {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          // Max chunks getting decreased. We may need to clear off some of the pooled chunks now<a name="line.457"></a>
+<span class="sourceLineNo">458</span>          // itself. If the extra chunks are serving already, do not pool those when we get them back<a name="line.458"></a>
+<span class="sourceLineNo">459</span>          LOG.info("{} max count for chunks decreased from {} to {}", this.label, this.maxCount,<a name="line.459"></a>
+<span class="sourceLineNo">460</span>              newMaxCount);<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          this.maxCount = newMaxCount;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>          if (this.reclaimedChunks.size() &gt; newMaxCount) {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>            synchronized (this) {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>              while (this.reclaimedChunks.size() &gt; newMaxCount) {<a name="line.464"></a>
+<span class="sourceLineNo">465</span>                this.reclaimedChunks.poll();<a name="line.465"></a>
+<span class="sourceLineNo">466</span>              }<a name="line.466"></a>
+<span class="sourceLineNo">467</span>            }<a name="line.467"></a>
+<span class="sourceLineNo">468</span>          }<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>    }<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  }<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span>  @VisibleForTesting<a name="line.474"></a>
+<span class="sourceLineNo">475</span>  static void clearDisableFlag() {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    chunkPoolDisabled = false;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  private MemStoreChunkPool initializePool(String label, long globalMemStoreSize,<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      float poolSizePercentage, float initialCountPercentage, int chunkSize,<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      HeapMemoryManager heapMemoryManager) {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    if (poolSizePercentage &lt;= 0) {<a name="line.482"></a>
+<span class="sourceLineNo">483</span>      LOG.info("{} poolSizePercentage is less than 0. So not using pool", label);<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      return null;<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    }<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    if (chunkPoolDisabled) {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      return null;<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    }<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    if (poolSizePercentage &gt; 1.0) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      throw new IllegalArgumentException(<a name="line.490"></a>
+<span class="sourceLineNo">491</span>              MemStoreLAB.CHUNK_POOL_MAXSIZE_KEY + " must be between 0.0 and 1.0");<a name="line.491"></a>
+<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    int maxCount = (int) (globalMemStoreSize * poolSizePercentage / chunkSize);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    if (initialCountPercentage &gt; 1.0 || initialCountPercentage &lt; 0) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      throw new IllegalArgumentException(label + " " + MemStoreLAB.CHUNK_POOL_INITIALSIZE_KEY +<a name="line.495"></a>
+<span class="sourceLineNo">496</span>          " must be between 0.0 and 1.0");<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    int initialCount = (int) (initialCountPercentage * maxCount);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    LOG.info("Allocating {} MemStoreChunkPool with chunk size {}, max count {}, initial count {}",<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        label, StringUtils.byteDesc(chunkSize), maxCount, initialCount);<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    MemStoreChunkPool memStoreChunkPool = new MemStoreChunkPool(label, chunkSize, maxCount,<a name="line.501"></a>
+<span class="sourceLineNo">502</span>            initialCount, poolSizePercentage);<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    if (heapMemoryManager != null &amp;&amp; memStoreChunkPool != null) {<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      // Register with Heap Memory manager<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      heapMemoryManager.registerTuneObserver(memStoreChunkPool);<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    return memStoreChunkPool;<a name="line.507"></a>
+<span class="sourceLineNo">508</span>  }<a name="line.508"></a>
+<span class="sourceLineNo">509</span><a name="line.509"></a>
+<span class="sourceLineNo">510</span>  @VisibleForTesting<a name="line.510"></a>
+<span class="sourceLineNo">511</span>  int getMaxCount() {<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    return getMaxCount(ChunkType.DATA_CHUNK);<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>  @VisibleForTesting<a name="line.515"></a>
+<span class="sourceLineNo">516</span>  int getMaxCount(ChunkType chunkType) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    switch (chunkType) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      case INDEX_CHUNK:<a name="line.518"></a>
+<span class="sourceLineNo">519</span>        if (indexChunksPool != null) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>          return indexChunksPool.getMaxCount();<a name="line.520"></a>
+<span class="sourceLineNo">521</span>        }<a name="line.521"></a>
+<span class="sourceLineNo">522</span>        break;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      case DATA_CHUNK:<a name="line.523"></a>
+<span class="sourceLineNo">524</span>        if (dataChunksPool != null) {<a name="line.524"></a>
+<span class="sourceLineNo">525</span>          return dataChunksPool.getMaxCount();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>        }<a name="line.526"></a>
+<span class="sourceLineNo">527</span>        break;<a name="line.527"></a>
+<span class="sourceLineNo">528</span>      default:<a name="line.528"></a>
+<span class="sourceLineNo">529</span>        throw new IllegalArgumentException(<a name="line.529"></a>
+<span class="sourceLineNo">530</span>                "chunkType must either be INDEX_CHUNK or DATA_CHUNK");<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    return 0;<a name="line.533"></a>
+<span class="sourceLineNo">534</span>  }<a name="line.534"></a>
+<span class="sourceLineNo">535</span><a name="line.535"></a>
+<span class="sourceLineNo">536</span>  @VisibleForTesting<a name="line.536"></a>
+<span class="sourceLineNo">537</span>  int getPoolSize() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    return getPoolSize(ChunkType.DATA_CHUNK);<a name="line.538"></a>
+<span class="sourceLineNo">539</span>  }<a name="line.539"></a>
+<span class="sourceLineNo">540</span><a name="line.540"></a>
+<span class="sourceLineNo">541</span>  @VisibleForTesting<a name="line.541"></a>
+<span class="sourceLineNo">542</span>  int getPoolSize(ChunkType chunkType) {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    switch (chunkType) {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      case INDEX_CHUNK:<a name="line.544"></a>
+<span class="sourceLineNo">545</span>        if (indexChunksPool != null) {<a name="line.545"></a>
+<span class="sourceLineNo">546</span>          return indexChunksPool.reclaimedChunks.size();<a name="line.546"></a>
+<span class="sourceLineNo">547</span>        }<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        break;<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      case DATA_CHUNK:<a name="line.549"></a>
+<span class="sourceLineNo">550</span>        if (dataChunksPool != null) {<a name="line.550"></a>
+<span class="sourceLineNo">551</span>          return dataChunksPool.reclaimedChunks.size();<a name="line.551"></a>
+<span class="sourceLineNo">552</span>        }<a name="line.552"></a>
+<span cla

<TRUNCATED>

[11/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html
index 21f7b0f..6a5ac20 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html
@@ -143,511 +143,512 @@
 <span class="sourceLineNo">135</span>    return instance;<a name="line.135"></a>
 <span class="sourceLineNo">136</span>  }<a name="line.136"></a>
 <span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>  static ChunkCreator getInstance() {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    return instance;<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>  /**<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * Creates and inits a chunk. The default implementation for a specific chunk size.<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * @return the chunk that was initialized<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   */<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  Chunk getChunk(ChunkType chunkType) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    return getChunk(CompactingMemStore.IndexType.ARRAY_MAP, chunkType);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>  /**<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * Creates and inits a chunk. The default implementation.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * @return the chunk that was initialized<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   */<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  Chunk getChunk() {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    return getChunk(CompactingMemStore.IndexType.ARRAY_MAP, ChunkType.DATA_CHUNK);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  }<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>   * Creates and inits a chunk. The default implementation for a specific index type.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * @return the chunk that was initialized<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   */<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  Chunk getChunk(CompactingMemStore.IndexType chunkIndexType) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    return getChunk(chunkIndexType, ChunkType.DATA_CHUNK);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>  /**<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   * Creates and inits a chunk with specific index type and type.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * @return the chunk that was initialized<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   */<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  Chunk getChunk(CompactingMemStore.IndexType chunkIndexType, ChunkType chunkType) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    switch (chunkType) {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      case INDEX_CHUNK:<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        if (indexChunksPool != null) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>          return getChunk(chunkIndexType, indexChunksPool.getChunkSize());<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        }<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      case DATA_CHUNK:<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        if (dataChunksPool == null) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>          return getChunk(chunkIndexType, chunkSize);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        } else {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>          return getChunk(chunkIndexType, dataChunksPool.getChunkSize());<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        }<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      default:<a name="line.182"></a>
-<span class="sourceLineNo">183</span>        throw new IllegalArgumentException(<a name="line.183"></a>
-<span class="sourceLineNo">184</span>                "chunkType must either be INDEX_CHUNK or DATA_CHUNK");<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>  }<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>  /**<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   * Creates and inits a chunk.<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * @return the chunk that was initialized<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * @param chunkIndexType whether the requested chunk is going to be used with CellChunkMap index<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * @param size the size of the chunk to be allocated, in bytes<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   */<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  Chunk getChunk(CompactingMemStore.IndexType chunkIndexType, int size) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    Chunk chunk = null;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    MemStoreChunkPool pool = null;<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // if the size is suitable for one of the pools<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    if (dataChunksPool != null &amp;&amp; size == dataChunksPool.getChunkSize()) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      pool = dataChunksPool;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    } else if (indexChunksPool != null &amp;&amp; size == indexChunksPool.getChunkSize()) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      pool = indexChunksPool;<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>    // if we have a pool<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    if (pool != null) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      //  the pool creates the chunk internally. The chunk#init() call happens here<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      chunk = pool.getChunk();<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      // the pool has run out of maxCount<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      if (chunk == null) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        if (LOG.isTraceEnabled()) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          LOG.trace("The chunk pool is full. Reached maxCount= " + pool.getMaxCount()<a name="line.212"></a>
-<span class="sourceLineNo">213</span>                  + ". Creating chunk onheap.");<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        }<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      }<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>    if (chunk == null) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      // the second parameter explains whether CellChunkMap index is requested,<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // in that case, put allocated on demand chunk mapping into chunkIdMap<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      chunk = createChunk(false, chunkIndexType, size);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>    // now we need to actually do the expensive memory allocation step in case of a new chunk,<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    // else only the offset is set to the beginning of the chunk to accept allocations<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    chunk.init();<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    return chunk;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>  }<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>  /**<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   * Creates and inits a chunk of a special size, bigger than a regular chunk size.<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   * Such a chunk will never come from pool and will always be on demand allocated.<a name="line.232"></a>
-<span class="sourceLineNo">233</span>   * @return the chunk that was initialized<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * @param jumboSize the special size to be used<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  Chunk getJumboChunk(int jumboSize) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    int allocSize = jumboSize + SIZEOF_CHUNK_HEADER;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    if (allocSize &lt;= dataChunksPool.getChunkSize()) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      LOG.warn("Jumbo chunk size " + jumboSize + " must be more than regular chunk size "<a name="line.239"></a>
-<span class="sourceLineNo">240</span>              + dataChunksPool.getChunkSize() + ". Converting to regular chunk.");<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      return getChunk(CompactingMemStore.IndexType.CHUNK_MAP);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    }<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    // the new chunk is going to hold the jumbo cell data and needs to be referenced by<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    // a strong map. Therefore the CCM index type<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    return getChunk(CompactingMemStore.IndexType.CHUNK_MAP, allocSize);<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>  /**<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   * Creates the chunk either onheap or offheap<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   * @param pool indicates if the chunks have to be created which will be used by the Pool<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * @param chunkIndexType whether the requested chunk is going to be used with CellChunkMap index<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   * @param size the size of the chunk to be allocated, in bytes<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   * @return the chunk<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  private Chunk createChunk(boolean pool, CompactingMemStore.IndexType chunkIndexType, int size) {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    Chunk chunk = null;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    int id = chunkID.getAndIncrement();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    assert id &gt; 0;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    // do not create offheap chunk on demand<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (pool &amp;&amp; this.offheap) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      chunk = new OffheapChunk(size, id, pool);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    } else {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      chunk = new OnheapChunk(size, id, pool);<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    if (pool || (chunkIndexType == CompactingMemStore.IndexType.CHUNK_MAP)) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      // put the pool chunk into the chunkIdMap so it is not GC-ed<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      this.chunkIdMap.put(chunk.getId(), chunk);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    }<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    return chunk;<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>  // Chunks from pool are created covered with strong references anyway<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  // TODO: change to CHUNK_MAP if it is generally defined<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  private Chunk createChunkForPool(CompactingMemStore.IndexType chunkIndexType, int chunkSize) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    if (chunkSize != dataChunksPool.getChunkSize() &amp;&amp;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>            chunkSize != indexChunksPool.getChunkSize()) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      return null;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    }<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    return createChunk(true, chunkIndexType, chunkSize);<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>  @VisibleForTesting<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    // Used to translate the ChunkID into a chunk ref<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  Chunk getChunk(int id) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    // can return null if chunk was never mapped<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    return chunkIdMap.get(id);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  }<a name="line.287"></a>
-<span class="sourceLineNo">288</span><a name="line.288"></a>
-<span class="sourceLineNo">289</span>  boolean isOffheap() {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    return this.offheap;<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>  private void removeChunks(Set&lt;Integer&gt; chunkIDs) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    this.chunkIdMap.keySet().removeAll(chunkIDs);<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>  Chunk removeChunk(int chunkId) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    return this.chunkIdMap.remove(chunkId);<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>  @VisibleForTesting<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    // the chunks in the chunkIdMap may already be released so we shouldn't relay<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    // on this counting for strong correctness. This method is used only in testing.<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  int numberOfMappedChunks() {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    return this.chunkIdMap.size();<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>  @VisibleForTesting<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  void clearChunkIds() {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    this.chunkIdMap.clear();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  }<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span>  /**<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * A pool of {@link Chunk} instances.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   *<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   * MemStoreChunkPool caches a number of retired chunks for reusing, it could<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   * decrease allocating bytes when writing, thereby optimizing the garbage<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * collection on JVM.<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private  class MemStoreChunkPool implements HeapMemoryTuneObserver {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    private final int chunkSize;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    private int maxCount;<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    // A queue of reclaimed chunks<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    private final BlockingQueue&lt;Chunk&gt; reclaimedChunks;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private final float poolSizePercentage;<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>    /** Statistics thread schedule pool */<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    private final ScheduledExecutorService scheduleThreadPool;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    /** Statistics thread */<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    private static final int statThreadPeriod = 60 * 5;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    private final AtomicLong chunkCount = new AtomicLong();<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    private final LongAdder reusedChunkCount = new LongAdder();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    private final String label;<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>    MemStoreChunkPool(String label, int chunkSize, int maxCount, int initialCount,<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        float poolSizePercentage) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      this.label = label;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      this.chunkSize = chunkSize;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      this.maxCount = maxCount;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.poolSizePercentage = poolSizePercentage;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.reclaimedChunks = new LinkedBlockingQueue&lt;&gt;();<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      for (int i = 0; i &lt; initialCount; i++) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        Chunk chunk = createChunk(true, CompactingMemStore.IndexType.ARRAY_MAP, chunkSize);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        chunk.init();<a name="line.345"></a>
-<span class="sourceLineNo">346</span>        reclaimedChunks.add(chunk);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      }<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      chunkCount.set(initialCount);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      final String n = Thread.currentThread().getName();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      scheduleThreadPool = Executors.newScheduledThreadPool(1, new ThreadFactoryBuilder()<a name="line.350"></a>
-<span class="sourceLineNo">351</span>              .setNameFormat(n + "-MemStoreChunkPool Statistics").setDaemon(true).build());<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      this.scheduleThreadPool.scheduleAtFixedRate(new StatisticsThread(), statThreadPeriod,<a name="line.352"></a>
-<span class="sourceLineNo">353</span>              statThreadPeriod, TimeUnit.SECONDS);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>    /**<a name="line.356"></a>
-<span class="sourceLineNo">357</span>     * Poll a chunk from the pool, reset it if not null, else create a new chunk to return if we have<a name="line.357"></a>
-<span class="sourceLineNo">358</span>     * not yet created max allowed chunks count. When we have already created max allowed chunks and<a name="line.358"></a>
-<span class="sourceLineNo">359</span>     * no free chunks as of now, return null. It is the responsibility of the caller to make a chunk<a name="line.359"></a>
-<span class="sourceLineNo">360</span>     * then.<a name="line.360"></a>
-<span class="sourceLineNo">361</span>     * Note: Chunks returned by this pool must be put back to the pool after its use.<a name="line.361"></a>
-<span class="sourceLineNo">362</span>     * @return a chunk<a name="line.362"></a>
-<span class="sourceLineNo">363</span>     * @see #putbackChunks(Chunk)<a name="line.363"></a>
-<span class="sourceLineNo">364</span>     */<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    Chunk getChunk() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      return getChunk(CompactingMemStore.IndexType.ARRAY_MAP);<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>    Chunk getChunk(CompactingMemStore.IndexType chunkIndexType) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      Chunk chunk = reclaimedChunks.poll();<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      if (chunk != null) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        chunk.reset();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        reusedChunkCount.increment();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      } else {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        // Make a chunk iff we have not yet created the maxCount chunks<a name="line.375"></a>
-<span class="sourceLineNo">376</span>        while (true) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          long created = this.chunkCount.get();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          if (created &lt; this.maxCount) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>            if (this.chunkCount.compareAndSet(created, created + 1)) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>              chunk = createChunkForPool(chunkIndexType, chunkSize);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>              break;<a name="line.381"></a>
-<span class="sourceLineNo">382</span>            }<a name="line.382"></a>
-<span class="sourceLineNo">383</span>          } else {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>            break;<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>
-<span class="sourceLineNo">387</span>      }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      return chunk;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>    int getChunkSize() {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      return chunkSize;<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>    /**<a name="line.395"></a>
-<span class="sourceLineNo">396</span>     * Add the chunks to the pool, when the pool achieves the max size, it will skip the remaining<a name="line.396"></a>
-<span class="sourceLineNo">397</span>     * chunks<a name="line.397"></a>
-<span class="sourceLineNo">398</span>     * @param c<a name="line.398"></a>
-<span class="sourceLineNo">399</span>     */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    private void putbackChunks(Chunk c) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      int toAdd = this.maxCount - reclaimedChunks.size();<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      if (c.isFromPool() &amp;&amp; c.size == chunkSize &amp;&amp; toAdd &gt; 0) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        reclaimedChunks.add(c);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      } else {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        // remove the chunk (that is not going to pool)<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        // though it is initially from the pool or not<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        ChunkCreator.this.removeChunk(c.getId());<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    }<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    private class StatisticsThread extends Thread {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      StatisticsThread() {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        super("MemStoreChunkPool.StatisticsThread");<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        setDaemon(true);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      }<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>      @Override<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      public void run() {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>        logStats();<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>      private void logStats() {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        if (!LOG.isDebugEnabled()) return;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        long created = chunkCount.get();<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        long reused = reusedChunkCount.sum();<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        long total = created + reused;<a name="line.426"></a>
-<span class="sourceLineNo">427</span>        LOG.debug("{} stats (chunk size={}): current pool size={}, created chunk count={}, " +<a name="line.427"></a>
-<span class="sourceLineNo">428</span>                "reused chunk count={}, reuseRatio={}", label, chunkSize, reclaimedChunks.size(),<a name="line.428"></a>
-<span class="sourceLineNo">429</span>            created, reused,<a name="line.429"></a>
-<span class="sourceLineNo">430</span>            (total == 0? "0": StringUtils.formatPercent((float)reused/(float)total,2)));<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    private int getMaxCount() {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      return this.maxCount;<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    @Override<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    public void onHeapMemoryTune(long newMemstoreSize, long newBlockCacheSize) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      // don't do any tuning in case of offheap memstore<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      if (isOffheap()) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        LOG.warn("{} not tuning the chunk pool as it is offheap", label);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>        return;<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      int newMaxCount =<a name="line.445"></a>
-<span class="sourceLineNo">446</span>              (int) (newMemstoreSize * poolSizePercentage / getChunkSize());<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      if (newMaxCount != this.maxCount) {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>        // We need an adjustment in the chunks numbers<a name="line.448"></a>
-<span class="sourceLineNo">449</span>        if (newMaxCount &gt; this.maxCount) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>          // Max chunks getting increased. Just change the variable. Later calls to getChunk() would<a name="line.450"></a>
-<span class="sourceLineNo">451</span>          // create and add them to Q<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          LOG.info("{} max count for chunks increased from {} to {}", this.label, this.maxCount,<a name="line.452"></a>
-<span class="sourceLineNo">453</span>              newMaxCount);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          this.maxCount = newMaxCount;<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        } else {<a name="line.455"></a>
-<span class="sourceLineNo">456</span>          // Max chunks getting decreased. We may need to clear off some of the pooled chunks now<a name="line.456"></a>
-<span class="sourceLineNo">457</span>          // itself. If the extra chunks are serving already, do not pool those when we get them back<a name="line.457"></a>
-<span class="sourceLineNo">458</span>          LOG.info("{} max count for chunks decreased from {} to {}", this.label, this.maxCount,<a name="line.458"></a>
-<span class="sourceLineNo">459</span>              newMaxCount);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          this.maxCount = newMaxCount;<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          if (this.reclaimedChunks.size() &gt; newMaxCount) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>            synchronized (this) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>              while (this.reclaimedChunks.size() &gt; newMaxCount) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>                this.reclaimedChunks.poll();<a name="line.464"></a>
-<span class="sourceLineNo">465</span>              }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>            }<a name="line.466"></a>
-<span class="sourceLineNo">467</span>          }<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        }<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>  }<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>  @VisibleForTesting<a name="line.473"></a>
-<span class="sourceLineNo">474</span>  static void clearDisableFlag() {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    chunkPoolDisabled = false;<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  private MemStoreChunkPool initializePool(String label, long globalMemStoreSize,<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      float poolSizePercentage, float initialCountPercentage, int chunkSize,<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      HeapMemoryManager heapMemoryManager) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    if (poolSizePercentage &lt;= 0) {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      LOG.info("{} poolSizePercentage is less than 0. So not using pool", label);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      return null;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    if (chunkPoolDisabled) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      return null;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    if (poolSizePercentage &gt; 1.0) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      throw new IllegalArgumentException(<a name="line.489"></a>
-<span class="sourceLineNo">490</span>              MemStoreLAB.CHUNK_POOL_MAXSIZE_KEY + " must be between 0.0 and 1.0");<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    int maxCount = (int) (globalMemStoreSize * poolSizePercentage / chunkSize);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    if (initialCountPercentage &gt; 1.0 || initialCountPercentage &lt; 0) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      throw new IllegalArgumentException(label + " " + MemStoreLAB.CHUNK_POOL_INITIALSIZE_KEY +<a name="line.494"></a>
-<span class="sourceLineNo">495</span>          " must be between 0.0 and 1.0");<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    }<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    int initialCount = (int) (initialCountPercentage * maxCount);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    LOG.info("Allocating {} MemStoreChunkPool with chunk size {}, max count {}, initial count {}",<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        label, StringUtils.byteDesc(chunkSize), maxCount, initialCount);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    MemStoreChunkPool memStoreChunkPool = new MemStoreChunkPool(label, chunkSize, maxCount,<a name="line.500"></a>
-<span class="sourceLineNo">501</span>            initialCount, poolSizePercentage);<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    if (heapMemoryManager != null &amp;&amp; memStoreChunkPool != null) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      // Register with Heap Memory manager<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      heapMemoryManager.registerTuneObserver(memStoreChunkPool);<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    return memStoreChunkPool;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>  }<a name="line.507"></a>
-<span class="sourceLineNo">508</span><a name="line.508"></a>
-<span class="sourceLineNo">509</span>  @VisibleForTesting<a name="line.509"></a>
-<span class="sourceLineNo">510</span>  int getMaxCount() {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    return getMaxCount(ChunkType.DATA_CHUNK);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>  }<a name="line.512"></a>
-<span class="sourceLineNo">513</span><a name="line.513"></a>
-<span class="sourceLineNo">514</span>  @VisibleForTesting<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  int getMaxCount(ChunkType chunkType) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    switch (chunkType) {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      case INDEX_CHUNK:<a name="line.517"></a>
-<span class="sourceLineNo">518</span>        if (indexChunksPool != null) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          return indexChunksPool.getMaxCount();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        }<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        break;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      case DATA_CHUNK:<a name="line.522"></a>
-<span class="sourceLineNo">523</span>        if (dataChunksPool != null) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          return dataChunksPool.getMaxCount();<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>        break;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      default:<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        throw new IllegalArgumentException(<a name="line.528"></a>
-<span class="sourceLineNo">529</span>                "chunkType must either be INDEX_CHUNK or DATA_CHUNK");<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    return 0;<a name="line.532"></a>
-<span class="sourceLineNo">533</span>  }<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>  @VisibleForTesting<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  int getPoolSize() {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    return getPoolSize(ChunkType.DATA_CHUNK);<a name="line.537"></a>
-<span class="sourceLineNo">538</span>  }<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>  @VisibleForTesting<a name="line.540"></a>
-<span class="sourceLineNo">541</span>  int getPoolSize(ChunkType chunkType) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    switch (chunkType) {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      case INDEX_CHUNK:<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        if (indexChunksPool != null) {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>          return indexChunksPool.reclaimedChunks.size();<a name="line.545"></a>
-<span class="sourceLineNo">546</span>        }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>        break;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      case DATA_CHUNK:<a name="line.548"></a>
-<span class="sourceLineNo">549</span>        if (dataChunksPool != null) {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>          return dataChunksPool.reclaimedChunks.size();<a name="line.550"></a>
-<span class="sourceLineNo">551</span>        }<a name="line.551"></a>
-<span class="sourceLineNo">552</span>        break;<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      default:<a name="line.553"></a>
-<span class="sourceLineNo">554</span>        throw new IllegalArgumentException(<a name="line.554"></a>
-<span class="sourceLineNo">555</span>                "chunkType must either be INDEX_CHUNK or DATA_CHUNK");<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    }<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    return 0;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>  @VisibleForTesting<a name="line.560"></a>
-<span class="sourceLineNo">561</span>  boolean isChunkInPool(int chunkId) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    Chunk c = getChunk(chunkId);<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    if (c==null) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      return false;<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    }<a name="line.565"></a>
-<span class="sourceLineNo">566</span><a name="line.566"></a>
-<span class="sourceLineNo">567</span>    // chunks that are from pool will return true chunk reference not null<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    if (dataChunksPool != null &amp;&amp; dataChunksPool.reclaimedChunks.contains(c)) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      return true;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    } else if (indexChunksPool != null &amp;&amp; indexChunksPool.reclaimedChunks.contains(c)) {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      return true;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    }<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    return false;<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  }<a name="line.574"></a>
-<span class="sourceLineNo">575</span><a name="line.575"></a>
-<span class="sourceLineNo">576</span>  /*<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   * Only used in testing<a name="line.577"></a>
-<span class="sourceLineNo">578</span>   */<a name="line.578"></a>
-<span class="sourceLineNo">579</span>  @VisibleForTesting<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  void clearChunksInPool() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    if (dataChunksPool != null) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      dataChunksPool.reclaimedChunks.clear();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    }<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    if (indexChunksPool != null) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      indexChunksPool.reclaimedChunks.clear();<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    }<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  }<a name="line.587"></a>
-<span class="sourceLineNo">588</span><a name="line.588"></a>
-<span class="sourceLineNo">589</span>  int getChunkSize() {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    return getChunkSize(ChunkType.DATA_CHUNK);<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  }<a name="line.591"></a>
-<span class="sourceLineNo">592</span><a name="line.592"></a>
-<span class="sourceLineNo">593</span>  int getChunkSize(ChunkType chunkType) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    switch (chunkType) {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      case INDEX_CHUNK:<a name="line.595"></a>
-<span class="sourceLineNo">596</span>        if (indexChunksPool != null) {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>          return indexChunksPool.getChunkSize();<a name="line.597"></a>
-<span class="sourceLineNo">598</span>        }<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      case DATA_CHUNK:<a name="line.599"></a>
-<span class="sourceLineNo">600</span>        if (dataChunksPool != null) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>          return dataChunksPool.getChunkSize();<a name="line.601"></a>
-<span class="sourceLineNo">602</span>        } else { // When pools are empty<a name="line.602"></a>
-<span class="sourceLineNo">603</span>          return chunkSize;<a name="line.603"></a>
-<span class="sourceLineNo">604</span>        }<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      default:<a name="line.605"></a>
-<span class="sourceLineNo">606</span>        throw new IllegalArgumentException(<a name="line.606"></a>
-<span class="sourceLineNo">607</span>                "chunkType must either be INDEX_CHUNK or DATA_CHUNK");<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>  }<a name="line.609"></a>
-<span class="sourceLineNo">610</span><a name="line.610"></a>
-<span class="sourceLineNo">611</span>  synchronized void putbackChunks(Set&lt;Integer&gt; chunks) {<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    // if there is no pool just try to clear the chunkIdMap in case there is something<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    if (dataChunksPool == null &amp;&amp; indexChunksPool == null) {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      this.removeChunks(chunks);<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      return;<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    }<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>    // if there is a pool, go over all chunk IDs that came back, the chunks may be from pool or not<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    for (int chunkID : chunks) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      // translate chunk ID to chunk, if chunk initially wasn't in pool<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      // this translation will (most likely) return null<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      Chunk chunk = ChunkCreator.this.getChunk(chunkID);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      if (chunk != null) {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>        if (chunk.isFromPool() &amp;&amp; chunk.isIndexChunk()) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>          indexChunksPool.putbackChunks(chunk);<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        } else if (chunk.isFromPool() &amp;&amp; chunk.size == dataChunksPool.getChunkSize()) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>          dataChunksPool.putbackChunks(chunk);<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        } else {<a name="line.628"></a>
-<span class="sourceLineNo">629</span>          // chunks which are not from one of the pools<a name="line.629"></a>
-<span class="sourceLineNo">630</span>          // should be released without going to the pools.<a name="line.630"></a>
-<span class="sourceLineNo">631</span>          // Removing them from chunkIdMap will cause their removal by the GC.<a name="line.631"></a>
-<span class="sourceLineNo">632</span>          this.removeChunk(chunkID);<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      }<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      // if chunk is null, it was never covered by the chunkIdMap (and so wasn't in pool also),<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      // so we have nothing to do on its release<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    }<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    return;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>  }<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span>}<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
+<span class="sourceLineNo">138</span>  @VisibleForTesting<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  public static ChunkCreator getInstance() {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    return instance;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  }<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>  /**<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * Creates and inits a chunk. The default implementation for a specific chunk size.<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * @return the chunk that was initialized<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   */<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  Chunk getChunk(ChunkType chunkType) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    return getChunk(CompactingMemStore.IndexType.ARRAY_MAP, chunkType);<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  }<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>  /**<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * Creates and inits a chunk. The default implementation.<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * @return the chunk that was initialized<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  Chunk getChunk() {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    return getChunk(CompactingMemStore.IndexType.ARRAY_MAP, ChunkType.DATA_CHUNK);<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>  /**<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * Creates and inits a chunk. The default implementation for a specific index type.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * @return the chunk that was initialized<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   */<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  Chunk getChunk(CompactingMemStore.IndexType chunkIndexType) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    return getChunk(chunkIndexType, ChunkType.DATA_CHUNK);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>  /**<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * Creates and inits a chunk with specific index type and type.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * @return the chunk that was initialized<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   */<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  Chunk getChunk(CompactingMemStore.IndexType chunkIndexType, ChunkType chunkType) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    switch (chunkType) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      case INDEX_CHUNK:<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        if (indexChunksPool != null) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>          return getChunk(chunkIndexType, indexChunksPool.getChunkSize());<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        }<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      case DATA_CHUNK:<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        if (dataChunksPool == null) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          return getChunk(chunkIndexType, chunkSize);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        } else {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>          return getChunk(chunkIndexType, dataChunksPool.getChunkSize());<a name="line.181"></a>
+<span class="sourceLineNo">182</span>        }<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      default:<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        throw new IllegalArgumentException(<a name="line.184"></a>
+<span class="sourceLineNo">185</span>                "chunkType must either be INDEX_CHUNK or DATA_CHUNK");<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>
+<span class="sourceLineNo">189</span>  /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * Creates and inits a chunk.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * @return the chunk that was initialized<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   * @param chunkIndexType whether the requested chunk is going to be used with CellChunkMap index<a name="line.192"></a>
+<span class="sourceLineNo">193</span>   * @param size the size of the chunk to be allocated, in bytes<a name="line.193"></a>
+<span class="sourceLineNo">194</span>   */<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  Chunk getChunk(CompactingMemStore.IndexType chunkIndexType, int size) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    Chunk chunk = null;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    MemStoreChunkPool pool = null;<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>    // if the size is suitable for one of the pools<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    if (dataChunksPool != null &amp;&amp; size == dataChunksPool.getChunkSize()) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      pool = dataChunksPool;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    } else if (indexChunksPool != null &amp;&amp; size == indexChunksPool.getChunkSize()) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      pool = indexChunksPool;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>    // if we have a pool<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    if (pool != null) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      //  the pool creates the chunk internally. The chunk#init() call happens here<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      chunk = pool.getChunk();<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      // the pool has run out of maxCount<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      if (chunk == null) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        if (LOG.isTraceEnabled()) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>          LOG.trace("The chunk pool is full. Reached maxCount= " + pool.getMaxCount()<a name="line.213"></a>
+<span class="sourceLineNo">214</span>                  + ". Creating chunk onheap.");<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        }<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><a name="line.218"></a>
+<span class="sourceLineNo">219</span>    if (chunk == null) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      // the second parameter explains whether CellChunkMap index is requested,<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      // in that case, put allocated on demand chunk mapping into chunkIdMap<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      chunk = createChunk(false, chunkIndexType, size);<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>    // now we need to actually do the expensive memory allocation step in case of a new chunk,<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    // else only the offset is set to the beginning of the chunk to accept allocations<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    chunk.init();<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    return chunk;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>  /**<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * Creates and inits a chunk of a special size, bigger than a regular chunk size.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * Such a chunk will never come from pool and will always be on demand allocated.<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   * @return the chunk that was initialized<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   * @param jumboSize the special size to be used<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  Chunk getJumboChunk(int jumboSize) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    int allocSize = jumboSize + SIZEOF_CHUNK_HEADER;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    if (allocSize &lt;= dataChunksPool.getChunkSize()) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      LOG.warn("Jumbo chunk size " + jumboSize + " must be more than regular chunk size "<a name="line.240"></a>
+<span class="sourceLineNo">241</span>              + dataChunksPool.getChunkSize() + ". Converting to regular chunk.");<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      return getChunk(CompactingMemStore.IndexType.CHUNK_MAP);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    }<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    // the new chunk is going to hold the jumbo cell data and needs to be referenced by<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    // a strong map. Therefore the CCM index type<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    return getChunk(CompactingMemStore.IndexType.CHUNK_MAP, allocSize);<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>  /**<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * Creates the chunk either onheap or offheap<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   * @param pool indicates if the chunks have to be created which will be used by the Pool<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   * @param chunkIndexType whether the requested chunk is going to be used with CellChunkMap index<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   * @param size the size of the chunk to be allocated, in bytes<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * @return the chunk<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   */<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  private Chunk createChunk(boolean pool, CompactingMemStore.IndexType chunkIndexType, int size) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    Chunk chunk = null;<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    int id = chunkID.getAndIncrement();<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    assert id &gt; 0;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    // do not create offheap chunk on demand<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    if (pool &amp;&amp; this.offheap) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      chunk = new OffheapChunk(size, id, pool);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    } else {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      chunk = new OnheapChunk(size, id, pool);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    if (pool || (chunkIndexType == CompactingMemStore.IndexType.CHUNK_MAP)) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      // put the pool chunk into the chunkIdMap so it is not GC-ed<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      this.chunkIdMap.put(chunk.getId(), chunk);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    }<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    return chunk;<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>  // Chunks from pool are created covered with strong references anyway<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  // TODO: change to CHUNK_MAP if it is generally defined<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  private Chunk createChunkForPool(CompactingMemStore.IndexType chunkIndexType, int chunkSize) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    if (chunkSize != dataChunksPool.getChunkSize() &amp;&amp;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>            chunkSize != indexChunksPool.getChunkSize()) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      return null;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    return createChunk(true, chunkIndexType, chunkSize);<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>  @VisibleForTesting<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    // Used to translate the ChunkID into a chunk ref<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  Chunk getChunk(int id) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    // can return null if chunk was never mapped<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    return chunkIdMap.get(id);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>  }<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>  boolean isOffheap() {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    return this.offheap;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>  }<a name="line.292"></a>
+<span class="sourceLineNo">293</span><a name="line.293"></a>
+<span class="sourceLineNo">294</span>  private void removeChunks(Set&lt;Integer&gt; chunkIDs) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    this.chunkIdMap.keySet().removeAll(chunkIDs);<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>  Chunk removeChunk(int chunkId) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    return this.chunkIdMap.remove(chunkId);<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>  @VisibleForTesting<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    // the chunks in the chunkIdMap may already be released so we shouldn't relay<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    // on this counting for strong correctness. This method is used only in testing.<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  int numberOfMappedChunks() {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    return this.chunkIdMap.size();<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  }<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span>  @VisibleForTesting<a name="line.309"></a>
+<span class="sourceLineNo">310</span>  void clearChunkIds() {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    this.chunkIdMap.clear();<a name="line.311"></a>
+<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * A pool of {@link Chunk} instances.<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   *<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * MemStoreChunkPool caches a number of retired chunks for reusing, it could<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * decrease allocating bytes when writing, thereby optimizing the garbage<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   * collection on JVM.<a name="line.319"></a>
+<span class="sourceLineNo">320</span>   */<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  private  class MemStoreChunkPool implements HeapMemoryTuneObserver {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    private final int chunkSize;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    private int maxCount;<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    // A queue of reclaimed chunks<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    private final BlockingQueue&lt;Chunk&gt; reclaimedChunks;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    private final float poolSizePercentage;<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>    /** Statistics thread schedule pool */<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    private final ScheduledExecutorService scheduleThreadPool;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    /** Statistics thread */<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    private static final int statThreadPeriod = 60 * 5;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    private final AtomicLong chunkCount = new AtomicLong();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    private final LongAdder reusedChunkCount = new LongAdder();<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    private final String label;<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>    MemStoreChunkPool(String label, int chunkSize, int maxCount, int initialCount,<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        float poolSizePercentage) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      this.label = label;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      this.chunkSize = chunkSize;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      this.maxCount = maxCount;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      this.poolSizePercentage = poolSizePercentage;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.reclaimedChunks = new LinkedBlockingQueue&lt;&gt;();<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      for (int i = 0; i &lt; initialCount; i++) {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        Chunk chunk = createChunk(true, CompactingMemStore.IndexType.ARRAY_MAP, chunkSize);<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        chunk.init();<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        reclaimedChunks.add(chunk);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      }<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      chunkCount.set(initialCount);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      final String n = Thread.currentThread().getName();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      scheduleThreadPool = Executors.newScheduledThreadPool(1, new ThreadFactoryBuilder()<a name="line.351"></a>
+<span class="sourceLineNo">352</span>              .setNameFormat(n + "-MemStoreChunkPool Statistics").setDaemon(true).build());<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      this.scheduleThreadPool.scheduleAtFixedRate(new StatisticsThread(), statThreadPeriod,<a name="line.353"></a>
+<span class="sourceLineNo">354</span>              statThreadPeriod, TimeUnit.SECONDS);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    }<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span>     * Poll a chunk from the pool, reset it if not null, else create a new chunk to return if we have<a name="line.358"></a>
+<span class="sourceLineNo">359</span>     * not yet created max allowed chunks count. When we have already created max allowed chunks and<a name="line.359"></a>
+<span class="sourceLineNo">360</span>     * no free chunks as of now, return null. It is the responsibility of the caller to make a chunk<a name="line.360"></a>
+<span class="sourceLineNo">361</span>     * then.<a name="line.361"></a>
+<span class="sourceLineNo">362</span>     * Note: Chunks returned by this pool must be put back to the pool after its use.<a name="line.362"></a>
+<span class="sourceLineNo">363</span>     * @return a chunk<a name="line.363"></a>
+<span class="sourceLineNo">364</span>     * @see #putbackChunks(Chunk)<a name="line.364"></a>
+<span class="sourceLineNo">365</span>     */<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    Chunk getChunk() {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      return getChunk(CompactingMemStore.IndexType.ARRAY_MAP);<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>    Chunk getChunk(CompactingMemStore.IndexType chunkIndexType) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      Chunk chunk = reclaimedChunks.poll();<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      if (chunk != null) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        chunk.reset();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        reusedChunkCount.increment();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      } else {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        // Make a chunk iff we have not yet created the maxCount chunks<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        while (true) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>          long created = this.chunkCount.get();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>          if (created &lt; this.maxCount) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>            if (this.chunkCount.compareAndSet(created, created + 1)) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>              chunk = createChunkForPool(chunkIndexType, chunkSize);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>              break;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>            }<a name="line.383"></a>
+<span class="sourceLineNo">384</span>          } else {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>            break;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>          }<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>      return chunk;<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>    int getChunkSize() {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      return chunkSize;<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>    /**<a name="line.396"></a>
+<span class="sourceLineNo">397</span>     * Add the chunks to the pool, when the pool achieves the max size, it will skip the remaining<a name="line.397"></a>
+<span class="sourceLineNo">398</span>     * chunks<a name="line.398"></a>
+<span class="sourceLineNo">399</span>     * @param c<a name="line.399"></a>
+<span class="sourceLineNo">400</span>     */<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    private void putbackChunks(Chunk c) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      int toAdd = this.maxCount - reclaimedChunks.size();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      if (c.isFromPool() &amp;&amp; c.size == chunkSize &amp;&amp; toAdd &gt; 0) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        reclaimedChunks.add(c);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      } else {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        // remove the chunk (that is not going to pool)<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        // though it is initially from the pool or not<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        ChunkCreator.this.removeChunk(c.getId());<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      }<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    }<a name="line.410"></a>
+<span class="sourceLineNo">411</span><a name="line.411"></a>
+<span class="sourceLineNo">412</span>    private class StatisticsThread extends Thread {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      StatisticsThread() {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        super("MemStoreChunkPool.StatisticsThread");<a name="line.414"></a>
+<span class="sourceLineNo">415</span>        setDaemon(true);<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      }<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span>      @Override<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      public void run() {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        logStats();<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      }<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>      private void logStats() {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        if (!LOG.isDebugEnabled()) return;<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        long created = chunkCount.get();<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        long reused = reusedChunkCount.sum();<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        long total = created + reused;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        LOG.debug("{} stats (chunk size={}): current pool size={}, created chunk count={}, " +<a name="line.428"></a>
+<span class="sourceLineNo">429</span>                "reused chunk count={}, reuseRatio={}", label, chunkSize, reclaimedChunks.size(),<a name="line.429"></a>
+<span class="sourceLineNo">430</span>            created, reused,<a name="line.430"></a>
+<span class="sourceLineNo">431</span>            (total == 0? "0": StringUtils.formatPercent((float)reused/(float)total,2)));<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>    private int getMaxCount() {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      return this.maxCount;<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    }<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>    @Override<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    public void onHeapMemoryTune(long newMemstoreSize, long newBlockCacheSize) {<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      // don't do any tuning in case of offheap memstore<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      if (isOffheap()) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        LOG.warn("{} not tuning the chunk pool as it is offheap", label);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>        return;<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      }<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      int newMaxCount =<a name="line.446"></a>
+<span class="sourceLineNo">447</span>              (int) (newMemstoreSize * poolSizePercentage / getChunkSize());<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      if (newMaxCount != this.maxCount) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>        // We need an adjustment in the chunks numbers<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        if (newMaxCount &gt; this.maxCount) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>          // Max chunks getting increased. Just change the variable. Later calls to getChunk() would<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          // create and add them to Q<a name="line.452"></a>
+<span class="sourceLineNo">453</span>          LOG.info("{} max count for chunks increased from {} to {}", this.label, this.maxCount,<a name="line.453"></a>
+<span class="sourceLineNo">454</span>              newMaxCount);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          this.maxCount = newMaxCount;<a name="line.455"></a>
+<span class="sourceLineNo">456</span>        } else {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          // Max chunks getting decreased. We may need to clear off some of the pooled chunks now<a name="line.457"></a>
+<span class="sourceLineNo">458</span>          // itself. If the extra chunks are serving already, do not pool those when we get them back<a name="line.458"></a>
+<span class="sourceLineNo">459</span>          LOG.info("{} max count for chunks decreased from {} to {}", this.label, this.maxCount,<a name="line.459"></a>
+<span class="sourceLineNo">460</span>              newMaxCount);<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          this.maxCount = newMaxCount;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>          if (this.reclaimedChunks.size() &gt; newMaxCount) {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>            synchronized (this) {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>              while (this.reclaimedChunks.size() &gt; newMaxCount) {<a name="line.464"></a>
+<span class="sourceLineNo">465</span>                this.reclaimedChunks.poll();<a name="line.465"></a>
+<span class="sourceLineNo">466</span>              }<a name="line.466"></a>
+<span class="sourceLineNo">467</span>            }<a name="line.467"></a>
+<span class="sourceLineNo">468</span>          }<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>    }<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  }<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span>  @VisibleForTesting<a name="line.474"></a>
+<span class="sourceLineNo">475</span>  static void clearDisableFlag() {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    chunkPoolDisabled = false;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  private MemStoreChunkPool initializePool(String label, long globalMemStoreSize,<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      float poolSizePercentage, float initialCountPercentage, int chunkSize,<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      HeapMemoryManager heapMemoryManager) {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    if (poolSizePercentage &lt;= 0) {<a name="line.482"></a>
+<span class="sourceLineNo">483</span>      LOG.info("{} poolSizePercentage is less than 0. So not using pool", label);<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      return null;<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    }<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    if (chunkPoolDisabled) {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      return null;<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    }<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    if (poolSizePercentage &gt; 1.0) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      throw new IllegalArgumentException(<a name="line.490"></a>
+<span class="sourceLineNo">491</span>              MemStoreLAB.CHUNK_POOL_MAXSIZE_KEY + " must be between 0.0 and 1.0");<a name="line.491"></a>
+<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    int maxCount = (int) (globalMemStoreSize * poolSizePercentage / chunkSize);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    if (initialCountPercentage &gt; 1.0 || initialCountPercentage &lt; 0) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      throw new IllegalArgumentException(label + " " + MemStoreLAB.CHUNK_POOL_INITIALSIZE_KEY +<a name="line.495"></a>
+<span class="sourceLineNo">496</span>          " must be between 0.0 and 1.0");<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    int initialCount = (int) (initialCountPercentage * maxCount);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    LOG.info("Allocating {} MemStoreChunkPool with chunk size {}, max count {}, initial count {}",<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        label, StringUtils.byteDesc(chunkSize), maxCount, initialCount);<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    MemStoreChunkPool memStoreChunkPool = new MemStoreChunkPool(label, chunkSize, maxCount,<a name="line.501"></a>
+<span class="sourceLineNo">502</span>            initialCount, poolSizePercentage);<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    if (heapMemoryManager != null &amp;&amp; memStoreChunkPool != null) {<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      // Register with Heap Memory manager<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      heapMemoryManager.registerTuneObserver(memStoreChunkPool);<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    return memStoreChunkPool;<a name="line.507"></a>
+<span class="sourceLineNo">508</span>  }<a name="line.508"></a>
+<span class="sourceLineNo">509</span><a name="line.509"></a>
+<span class="sourceLineNo">510</span>  @VisibleForTesting<a name="line.510"></a>
+<span class="sourceLineNo">511</span>  int getMaxCount() {<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    return getMaxCount(ChunkType.DATA_CHUNK);<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>  @VisibleForTesting<a name="line.515"></a>
+<span class="sourceLineNo">516</span>  int getMaxCount(ChunkType chunkType) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    switch (chunkType) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      case INDEX_CHUNK:<a name="line.518"></a>
+<span class="sourceLineNo">519</span>        if (indexChunksPool != null) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>          return indexChunksPool.getMaxCount();<a name="line.520"></a>
+<span class="sourceLineNo">521</span>        }<a name="line.521"></a>
+<span class="sourceLineNo">522</span>        break;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      case DATA_CHUNK:<a name="line.523"></a>
+<span class="sourceLineNo">524</span>        if (dataChunksPool != null) {<a name="line.524"></a>
+<span class="sourceLineNo">525</span>          return dataChunksPool.getMaxCount();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>        }<a name="line.526"></a>
+<span class="sourceLineNo">527</span>        break;<a name="line.527"></a>
+<span class="sourceLineNo">528</span>      default:<a name="line.528"></a>
+<span class="sourceLineNo">529</span>        throw new IllegalArgumentException(<a name="line.529"></a>
+<span class="sourceLineNo">530</span>                "chunkType must either be INDEX_CHUNK or DATA_CHUNK");<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    return 0;<a name="line.533"></a>
+<span class="sourceLineNo">534</span>  }<a name="line.534"></a>
+<span class="sourceLineNo">535</span><a name="line.535"></a>
+<span class="sourceLineNo">536</span>  @VisibleForTesting<a name="line.536"></a>
+<span class="sourceLineNo">537</span>  int getPoolSize() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    return getPoolSize(ChunkType.DATA_CHUNK);<a name="line.538"></a>
+<span class="sourceLineNo">539</span>  }<a name="line.539"></a>
+<span class="sourceLineNo">540</span><a name="line.540"></a>
+<span class="sourceLineNo">541</span>  @VisibleForTesting<a name="line.541"></a>
+<span class="sourceLineNo">542</span>  int getPoolSize(ChunkType chunkType) {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    switch (chunkType) {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      case INDEX_CHUNK:<a name="line.544"></a>
+<span class="sourceLineNo">545</span>        if (indexChunksPool != null) {<a name="line.545"></a>
+<span class="sourceLineNo">546</span>          return indexChunksPool.reclaimedChunks.size();<a name="line.546"></a>
+<span class="sourceLineNo">547</span>        }<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        break;<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      case DATA_CHUNK:<a name="line.549"></a>
+<span class="sourceLineNo">550</span>        if (dataChunksPool != null) {<a name="line.550"></a>
+<span class="sourceLineNo">551</span>          return dataChunksPool.reclaimedChunks.size();<a name="line.551"></a>
+<span class="sourceLineNo">552</span>        }<a name="line.552"></a>
+<span class="sourceLineNo">553</span>        break;<a name="line.553"></a>
+<span class="sourc

<TRUNCATED>

[20/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html
index fda7a6b..be5ad01 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html
@@ -2481,7 +2481,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>movedRegions</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3464">movedRegions</a></pre>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3463">movedRegions</a></pre>
 </li>
 </ul>
 <a name="TIMEOUT_REGION_MOVED">
@@ -2490,7 +2490,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TIMEOUT_REGION_MOVED</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3468">TIMEOUT_REGION_MOVED</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3467">TIMEOUT_REGION_MOVED</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.TIMEOUT_REGION_MOVED">Constant Field Values</a></dd>
@@ -2534,7 +2534,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getUseThisHostnameInstead</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.659">getUseThisHostnameInstead</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.658">getUseThisHostnameInstead</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>
@@ -2548,7 +2548,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>setupWindows</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.678">setupWindows</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.677">setupWindows</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                  <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a>&nbsp;cm)</pre>
 <div class="block">If running on Windows, do windows-specific setup.</div>
 </li>
@@ -2559,7 +2559,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>setupNetty</h4>
-<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/NettyEventLoopGroupConfig.html" title="class in org.apache.hadoop.hbase.util">NettyEventLoopGroupConfig</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.690">setupNetty</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/NettyEventLoopGroupConfig.html" title="class in org.apache.hadoop.hbase.util">NettyEventLoopGroupConfig</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.689">setupNetty</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
 <a name="initializeFileSystem--">
@@ -2568,7 +2568,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeFileSystem</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.699">initializeFileSystem</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.698">initializeFileSystem</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>
@@ -2582,7 +2582,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getFsTableDescriptors</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase">TableDescriptors</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.715">getFsTableDescriptors</a>()
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase">TableDescriptors</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.714">getFsTableDescriptors</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>
@@ -2596,7 +2596,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetaTableObserver</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html?is-external=true" title="class or interface in java.util.function">Function</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>,<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.720">getMetaTableObserver</a>()</pre>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html?is-external=true" title="class or interface in java.util.function">Function</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>,<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.719">getMetaTableObserver</a>()</pre>
 </li>
 </ul>
 <a name="login-org.apache.hadoop.hbase.security.UserProvider-java.lang.String-">
@@ -2605,7 +2605,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>login</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.724">login</a>(<a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a>&nbsp;user,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.723">login</a>(<a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a>&nbsp;user,
                      <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;host)
               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>
@@ -2620,7 +2620,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForMasterActive</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.734">waitForMasterActive</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.733">waitForMasterActive</a>()</pre>
 <div class="block">Wait for an active Master.
  See override in Master superclass for how it is used.</div>
 </li>
@@ -2631,7 +2631,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcessName</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.736">getProcessName</a>()</pre>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.735">getProcessName</a>()</pre>
 </li>
 </ul>
 <a name="canCreateBaseZNode--">
@@ -2640,7 +2640,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>canCreateBaseZNode</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.740">canCreateBaseZNode</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.739">canCreateBaseZNode</a>()</pre>
 </li>
 </ul>
 <a name="canUpdateTableDescriptor--">
@@ -2649,7 +2649,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>canUpdateTableDescriptor</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.744">canUpdateTableDescriptor</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.743">canUpdateTableDescriptor</a>()</pre>
 </li>
 </ul>
 <a name="createRpcServices--">
@@ -2658,7 +2658,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>createRpcServices</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.748">createRpcServices</a>()
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.747">createRpcServices</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>
@@ -2672,7 +2672,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>configureInfoServer</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.752">configureInfoServer</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.751">configureInfoServer</a>()</pre>
 </li>
 </ul>
 <a name="getDumpServlet--">
@@ -2681,7 +2681,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getDumpServlet</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends javax.servlet.http.HttpServlet&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.757">getDumpServlet</a>()</pre>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends javax.servlet.http.HttpServlet&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.756">getDumpServlet</a>()</pre>
 </li>
 </ul>
 <a name="registerService-com.google.protobuf.Service-">
@@ -2690,7 +2690,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>registerService</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.762">registerService</a>(com.google.protobuf.Service&nbsp;instance)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.761">registerService</a>(com.google.protobuf.Service&nbsp;instance)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#registerService-com.google.protobuf.Service-">RegionServerServices</a></code></span></div>
 <div class="block">Registers a new protocol buffer <code>Service</code> subclass as a coprocessor endpoint to be
  available for handling</div>
@@ -2710,7 +2710,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>createClusterConnection</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.789">createClusterConnection</a>()
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.788">createClusterConnection</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">Create a 'smarter' Connection, one that is capable of by-passing RPC if the request is to
  the local server; i.e. a short-circuit Connection. Safe to use going to local or remote
@@ -2727,7 +2727,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>checkCodecs</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.809">checkCodecs</a>(org.apache.hadoop.conf.Configuration&nbsp;c)
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.808">checkCodecs</a>(org.apache.hadoop.conf.Configuration&nbsp;c)
                          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">Run test on configured codecs to make sure supporting libs are in place.</div>
 <dl>
@@ -2744,7 +2744,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterId</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/regionserver/HRegionServer.html#line.821">getClusterId</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/regionserver/HRegionServer.html#line.820">getClusterId</a>()</pre>
 </li>
 </ul>
 <a name="setupClusterConnection--">
@@ -2753,7 +2753,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>setupClusterConnection</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.829">setupClusterConnection</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.828">setupClusterConnection</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">Setup our cluster connection if not already initialized.</div>
 <dl>
@@ -2768,7 +2768,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>preRegistrationInitialization</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.841">preRegistrationInitialization</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.840">preRegistrationInitialization</a>()</pre>
 <div class="block">All initialization needed before we go register with Master.<br>
  Do bare minimum. Do bulk of initializations AFTER we've connected to the Master.<br>
  In here we just put up the RpcServer, setup Connection, and ZooKeeper.</div>
@@ -2780,7 +2780,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeZooKeeper</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.864">initializeZooKeeper</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.863">initializeZooKeeper</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Bring up connection to zk ensemble and then wait until a master for this cluster and then after
@@ -2800,7 +2800,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>blockAndCheckIfStopped</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.917">blockAndCheckIfStopped</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKNodeTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKNodeTracker</a>&nbsp;tracker)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.916">blockAndCheckIfStopped</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKNodeTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKNodeTracker</a>&nbsp;tracker)
                              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>
 <div class="block">Utilty method to wait indefinitely on a znode availability while checking
@@ -2820,7 +2820,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>isClusterUp</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.930">isClusterUp</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.929">isClusterUp</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#isClusterUp--">isClusterUp</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a></code></dd>
@@ -2835,7 +2835,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.939">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.938">run</a>()</pre>
 <div class="block">The HRegionServer sticks in this loop until closed.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -2851,7 +2851,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>containsMetaTableRegions</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1184">containsMetaTableRegions</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1183">containsMetaTableRegions</a>()</pre>
 </li>
 </ul>
 <a name="areAllUserRegionsOffline--">
@@ -2860,7 +2860,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>areAllUserRegionsOffline</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1188">areAllUserRegionsOffline</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1187">areAllUserRegionsOffline</a>()</pre>
 </li>
 </ul>
 <a name="getWriteRequestCount--">
@@ -2869,7 +2869,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getWriteRequestCount</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1203">getWriteRequestCount</a>()</pre>
+<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1202">getWriteRequestCount</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Current write count for all online regions.</dd>
@@ -2882,7 +2882,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>tryRegionServerReport</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1212">tryRegionServerReport</a>(long&nbsp;reportStartTime,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1211">tryRegionServerReport</a>(long&nbsp;reportStartTime,
                                      long&nbsp;reportEndTime)
                               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>
@@ -2897,7 +2897,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>reportRegionSizesForQuotas</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1246">reportRegionSizesForQuotas</a>(<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionSizeStore.html" title="interface in org.apache.hadoop.hbase.quotas">RegionSizeStore</a>&nbsp;regionSizeStore)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1245">reportRegionSizesForQuotas</a>(<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionSizeStore.html" title="interface in org.apache.hadoop.hbase.quotas">RegionSizeStore</a>&nbsp;regionSizeStore)</pre>
 <div class="block">Reports the given map of Regions and their size on the filesystem to the active Master.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -2915,7 +2915,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>buildReportAndSend</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1289">buildReportAndSend</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStatusService.BlockingInterface&nbsp;rss,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1288">buildReportAndSend</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStatusService.BlockingInterface&nbsp;rss,
                         <a href="../../../../../org/apache/hadoop/hbase/quotas/RegionSizeStore.html" title="interface in org.apache.hadoop.hbase.quotas">RegionSizeStore</a>&nbsp;regionSizeStore)
                  throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Builds the region size report and sends it to the master. Upon successful sending of the
@@ -2935,7 +2935,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>buildRegionSpaceUseReportRequest</h4>
-<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUseReportRequest&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1306">buildRegionSpaceUseReportRequest</a>(<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionSizeStore.html" title="interface in org.apache.hadoop.hbase.quotas">RegionSizeStore</a>&nbsp;regionSizes)</pre>
+<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUseReportRequest&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1305">buildRegionSpaceUseReportRequest</a>(<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionSizeStore.html" title="interface in org.apache.hadoop.hbase.quotas">RegionSizeStore</a>&nbsp;regionSizes)</pre>
 <div class="block">Builds a <code>RegionServerStatusProtos.RegionSpaceUseReportRequest</code> protobuf message from the region size map.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -2951,7 +2951,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>convertRegionSize</h4>
-<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1322">convertRegionSize</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1321">convertRegionSize</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                                                                                                             <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;sizeInBytes)</pre>
 <div class="block">Converts a pair of <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a> and <code>long</code> into a <code>RegionServerStatusProtos.RegionSpaceUse</code>
  protobuf message.</div>
@@ -2970,7 +2970,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>buildServerLoad</h4>
-<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.ServerLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1329">buildServerLoad</a>(long&nbsp;reportStartTime,
+<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.ServerLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1328">buildServerLoad</a>(long&nbsp;reportStartTime,
                                                                                                  long&nbsp;reportEndTime)
                                                                                           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>
@@ -2985,7 +2985,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getOnlineRegionsAsPrintableString</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1400">getOnlineRegionsAsPrintableString</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1399">getOnlineRegionsAsPrintableString</a>()</pre>
 </li>
 </ul>
 <a name="waitOnAllRegionsToClose-boolean-">
@@ -2994,7 +2994,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>waitOnAllRegionsToClose</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1412">waitOnAllRegionsToClose</a>(boolean&nbsp;abort)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1411">waitOnAllRegionsToClose</a>(boolean&nbsp;abort)</pre>
 <div class="block">Wait on regions close.</div>
 </li>
 </ul>
@@ -3004,7 +3004,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>sleep</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1466">sleep</a>(long&nbsp;millis)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1465">sleep</a>(long&nbsp;millis)</pre>
 </li>
 </ul>
 <a name="shutdownWAL-boolean-">
@@ -3013,7 +3013,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdownWAL</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1477">shutdownWAL</a>(boolean&nbsp;close)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1476">shutdownWAL</a>(boolean&nbsp;close)</pre>
 </li>
 </ul>
 <a name="handleReportForDutyResponse-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse-">
@@ -3022,7 +3022,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>handleReportForDutyResponse</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1498">handleReportForDutyResponse</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse&nbsp;c)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1497">handleReportForDutyResponse</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse&nbsp;c)
                                     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>
@@ -3036,7 +3036,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeMemStoreChunkCreator</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1592">initializeMemStoreChunkCreator</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1591">initializeMemStoreChunkCreator</a>()</pre>
 </li>
 </ul>
 <a name="startHeapMemoryManager--">
@@ -3045,7 +3045,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>startHeapMemoryManager</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1613">startHeapMemoryManager</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1612">startHeapMemoryManager</a>()</pre>
 </li>
 </ul>
 <a name="createMyEphemeralNode--">
@@ -3054,7 +3054,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>createMyEphemeralNode</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1621">createMyEphemeralNode</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1620">createMyEphemeralNode</a>()
                             throws org.apache.zookeeper.KeeperException,
                                    <a href="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>
@@ -3070,7 +3070,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteMyEphemeralNode</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1629">deleteMyEphemeralNode</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1628">deleteMyEphemeralNode</a>()
                             throws org.apache.zookeeper.KeeperException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3084,7 +3084,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerAccounting</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerAccounting.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerAccounting</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1634">getRegionServerAccounting</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerAccounting.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerAccounting</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1633">getRegionServerAccounting</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getRegionServerAccounting--">getRegionServerAccounting</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a></code></dd>
@@ -3099,7 +3099,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionLoad</h4>
-<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1646">createRegionLoad</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
+<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1645">createRegionLoad</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
                                                                                                   org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad.Builder&nbsp;regionLoadBldr,
                                                                                                   org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.Builder&nbsp;regionSpecifier)
                                                                                            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>
@@ -3115,7 +3115,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionLoad</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1715">createRegionLoad</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;encodedRegionName)
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1714">createRegionLoad</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;encodedRegionName)
                                                                                                   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="paramLabel">Parameters:</span></dt>
@@ -3133,7 +3133,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>isOnline</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1829">isOnline</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1828">isOnline</a>()</pre>
 <div class="block">Report the status of the server. A server is online once all the startup is
  completed (setting up filesystem, starting executorService threads, etc.). This
  method is designed mostly to be useful in tests.</div>
@@ -3149,7 +3149,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>setupWALAndReplication</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1837">setupWALAndReplication</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1836">setupWALAndReplication</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">Setup WAL log and replication if enabled. Replication setup is done in here because it wants to
  be hooked up to WAL.</div>
@@ -3165,7 +3165,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>startReplicationService</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1869">startReplicationService</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1868">startReplicationService</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">Start up replication source and sink handlers.</div>
 <dl>
@@ -3180,7 +3180,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerMetrics</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1884">getRegionServerMetrics</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1883">getRegionServerMetrics</a>()</pre>
 </li>
 </ul>
 <a name="getMasterAddressTracker--">
@@ -3189,7 +3189,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterAddressTracker</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">MasterAddressTracker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1891">getMasterAddressTracker</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">MasterAddressTracker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1890">getMasterAddressTracker</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Master address tracker instance.</dd>
@@ -3202,7 +3202,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>startServices</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1909">startServices</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1908">startServices</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>
@@ -3216,7 +3216,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeThreads</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2011">initializeThreads</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2010">initializeThreads</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>
@@ -3230,7 +3230,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>registerConfigurationObservers</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2058">registerConfigurationObservers</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2057">registerConfigurationObservers</a>()</pre>
 </li>
 </ul>
 <a name="putUpWebUI--">
@@ -3239,7 +3239,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>putUpWebUI</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2070">putUpWebUI</a>()
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2069">putUpWebUI</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">Puts up the webui.</div>
 <dl>
@@ -3256,7 +3256,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>isHealthy</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2124">isHealthy</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2123">isHealthy</a>()</pre>
 </li>
 </ul>
 <a name="getWALs--">
@@ -3265,7 +3265,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALs</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2142">getWALs</a>()
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2141">getWALs</a>()
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -3284,7 +3284,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getWAL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2147">getWAL</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2146">getWAL</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -3303,7 +3303,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getWalRoller</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/LogRoller.html" title="class in org.apache.hadoop.hbase.regionserver">LogRoller</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2155">getWalRoller</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/LogRoller.html" title="class in org.apache.hadoop.hbase.regionserver">LogRoller</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2154">getWalRoller</a>()</pre>
 </li>
 </ul>
 <a name="getConnection--">
@@ -3312,7 +3312,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getConnection</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2160">getConnection</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2159">getConnection</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getConnection--">Server</a></code></span></div>
 <div class="block">Returns a reference to the servers' connection.
 
@@ -3330,7 +3330,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterConnection</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2165">getClusterConnection</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2164">getClusterConnection</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getClusterConnection--">Server</a></code></span></div>
 <div class="block">Returns a reference to the servers' cluster connection. Prefer <a href="../../../../../org/apache/hadoop/hbase/Server.html#getConnection--"><code>Server.getConnection()</code></a>.
 
@@ -3348,7 +3348,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetaTableLocator</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html" title="class in org.apache.hadoop.hbase.zookeeper">MetaTableLocator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2170">getMetaTableLocator</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html" title="class in org.apache.hadoop.hbase.zookeeper">MetaTableLocator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2169">getMetaTableLocator</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getMetaTableLocator--">Server</a></code></span></div>
 <div class="block">Returns instance of <a href="../../../../../org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html" title="class in org.apache.hadoop.hbase.zookeeper"><code>MetaTableLocator</code></a>
  running inside this server. This MetaServerLocator is started and stopped by server, clients
@@ -3367,7 +3367,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2175">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;msg)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2174">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;msg)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html#stop-java.lang.String-">Stoppable</a></code></span></div>
 <div class="block">Stop this service.
  Implementers should favor logging errors over throwing RuntimeExceptions.</div>
@@ -3385,7 +3385,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2185">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;msg,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2184">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;msg,
                  boolean&nbsp;force,
                  <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</pre>
 <div class="block">Stops the regionserver.</div>
@@ -3403,7 +3403,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForServerOnline</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2207">waitForServerOnline</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2206">waitForServerOnline</a>()</pre>
 </li>
 </ul>
 <a name="postOpenDeployTasks-org.apache.hadoop.hbase.regionserver.RegionServerServices.PostOpenDeployContext-">
@@ -3412,7 +3412,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>postOpenDeployTasks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2221">postOpenDeployTasks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.PostOpenDeployContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.PostOpenDeployContext</a>&nbsp;context)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2220">postOpenDeployTasks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.PostOpenDeployContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.PostOpenDeployContext</a>&nbsp;context)
                          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/regionserver/RegionServerServices.html#postOpenDeployTasks-org.apache.hadoop.hbase.regionserver.RegionServerServices.PostOpenDeployContext-">RegionServerServices</a></code></span></div>
 <div class="block">Tasks to perform after region open to complete deploy of region on regionserver</div>
@@ -3432,7 +3432,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>reportRegionStateTransition</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2253">reportRegionStateTransition</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.RegionStateTransitionContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.RegionStateTransitionContext</a>&nbsp;context)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2252">reportRegionStateTransition</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.RegionStateTransitionContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.RegionStateTransitionContext</a>&nbsp;context)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#reportRegionStateTransition-org.apache.hadoop.hbase.regionserver.RegionServerServices.RegionStateTransitionContext-">RegionServerServices</a></code></span></div>
 <div class="block">Notify master that a handler requests to change a region state</div>
 <dl>
@@ -3447,7 +3447,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>triggerFlushInPrimaryRegion</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2352">triggerFlushInPrimaryRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2351">triggerFlushInPrimaryRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</pre>
 <div class="block">Trigger a flush in the primary region replica if this region is a secondary replica. Does not
  block this thread. See RegionReplicaFlushHandler for details.</div>
 </li>
@@ -3458,7 +3458,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getRpcServer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterface.html" title="interface in org.apache.hadoop.hbase.ipc">RpcServerInterface</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2374">getRpcServer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterface.html" title="interface in org.apache.hadoop.hbase.ipc">RpcServerInterface</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2373">getRpcServer</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getRpcServer--">RegionServerServices</a></code></span></div>
 <div class="block">Returns a reference to the region server's RPC server</div>
 <dl>
@@ -3473,7 +3473,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getRSRpcServices</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2379">getRSRpcServices</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2378">getRSRpcServices</a>()</pre>
 </li>
 </ul>
 <a name="abort-java.lang.String-java.lang.Throwable-">
@@ -3482,7 +3482,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2394">abort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2393">abort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cause)</pre>
 <div class="block">Cause the server to exit without closing the regions it is serving, the log
  it is using and without notifying the master. Used unit testing and on
@@ -3502,7 +3502,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2437">abort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2436">abort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason)</pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#abort-java.lang.String-java.lang.Throwable-"><code>abort(String, Throwable)</code></a></dd>
@@ -3515,7 +3515,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>isAborted</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2442">isAborted</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2441">isAborted</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#isAborted--">Abortable</a></code></span></div>
 <div class="block">Check if the server or client was aborted.</div>
 <dl>
@@ -3532,7 +3532,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>kill</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2452">kill</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2451">kill</a>()</pre>
 </li>
 </ul>
 <a name="sendShutdownInterrupt--">
@@ -3541,7 +3541,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>sendShutdownInterrupt</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2460">sendShutdownInterrupt</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2459">sendShutdownInterrupt</a>()</pre>
 <div class="block">Called on stop/abort before closing the cluster connection and meta locator.</div>
 </li>
 </ul>
@@ -3551,7 +3551,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>stopServiceThreads</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2467">stopServiceThreads</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2466">stopServiceThreads</a>()</pre>
 <div class="block">Wait on all threads to finish. Presumption is that all closes and stops
  have already been called.</div>
 </li>
@@ -3562,7 +3562,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicationSourceService</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSourceService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2513">getReplicationSourceService</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSourceService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2512">getReplicationSourceService</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getReplicationSourceService--">getReplicationSourceService</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a></code></dd>
@@ -3578,7 +3578,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicationSinkService</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2520">getReplicationSinkService</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2519">getReplicationSinkService</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Return the object that implements the replication sink executorService.</dd>
@@ -3591,7 +3591,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionServerStatusStub</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2533">createRegionServerStatusStub</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2532">createRegionServerStatusStub</a>()</pre>
 <div class="block">Get the current master from ZooKeeper and open the RPC connection to it.
  To get a fresh connection, the current rssStub must be null.
  Method will block until a master is available. You can break from this
@@ -3608,7 +3608,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionServerStatusStub</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2546">createRegionServerStatusStub</a>(boolean&nbsp;refresh)</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2545">createRegionServerStatusStub</a>(boolean&nbsp;refresh)</pre>
 <div class="block">Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh
  connection, the current rssStub must be null. Method will block until a master is available.
  You can break from this block by requesting the server stop.</div>
@@ -3626,7 +3626,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>keepLooping</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2618">keepLooping</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2617">keepLooping</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>True if we should break loop because cluster is going down or
@@ -3640,7 +3640,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>reportForDuty</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2629">reportForDuty</a>()
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2628">reportForDuty</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>
@@ -3654,7 +3654,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getLastSequenceId</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2670">getLastSequenceId</a>(byte[]&nbsp;encodedRegionName)</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2669">getLastSequenceId</a>(byte[]&nbsp;encodedRegionName)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/LastSequenceId.html#getLastSequenceId-byte:A-">getLastSequenceId</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/LastSequenceId.html" title="interface in org.apache.hadoop.hbase.regionserver">LastSequenceId</a></code></dd>
@@ -3672,7 +3672,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>closeAllRegions</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2701">closeAllRegions</a>(boolean&nbsp;abort)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2700">closeAllRegions</a>(boolean&nbsp;abort)</pre>
 <div class="block">Closes all regions.  Called on our way out.
  Assumes that its not possible for new regions to be added to onlineRegions
  while this method runs.</div>
@@ -3684,7 +3684,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>closeMetaTableRegions</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2710">closeMetaTableRegions</a>(boolean&nbsp;abort)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2709">closeMetaTableRegions</a>(boolean&nbsp;abort)</pre>
 <div class="block">Close meta region if we carry it</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -3698,7 +3698,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>closeUserRegions</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2733">closeUserRegions</a>(boolean&nbsp;abort)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2732">closeUserRegions</a>(boolean&nbsp;abort)</pre>
 <div class="block">Schedule closes on all user regions.
  Should be safe calling multiple times because it wont' close regions
  that are already closed or that are closing.</div>
@@ -3714,7 +3714,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getInfoServer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http">InfoServer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2749">getInfoServer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http">InfoServer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2748">getInfoServer</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the info server</dd>
@@ -3727,7 +3727,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>isStopped</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2757">isStopped</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2756">isStopped</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html#isStopped--">isStopped</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></code></dd>
@@ -3742,7 +3742,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>isStopping</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2762">isStopping</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2761">isStopping</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/Server.html#isStopping--">isStopping</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a></code></dd>
@@ -3757,7 +3757,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getConfiguration</h4>
-<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2771">getConfiguration</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2770">getConfiguration</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getConfiguration--">Server</a></code></span></div>
 <div class="block">Gets the configuration object for this server.</div>
 <dl>
@@ -3774,7 +3774,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getWriteLock</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantReadWriteLock.WriteLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantReadWriteLock.WriteLock</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2776">getWriteLock</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantReadWriteLock.WriteLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantReadWriteLock.WriteLock</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2775">getWriteLock</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the write lock for the server</dd>
@@ -3787,7 +3787,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumberOfOnlineRegions</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2780">getNumberOfOnlineRegions</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2779">getNumberOfOnlineRegions</a>()</pre>
 </li>
 </ul>
 <a name="isOnlineRegionsEmpty--">
@@ -3796,7 +3796,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>isOnlineRegionsEmpty</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2784">isOnlineRegionsEmpty</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2783">isOnlineRegionsEmpty</a>()</pre>
 </li>
 </ul>
 <a name="getOnlineRegionsLocalContext--">
@@ -3805,7 +3805,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getOnlineRegionsLocalContext</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/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2793">getOnlineRegionsLocalContext</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/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2792">getOnlineRegionsLocalContext</a>()</pre>
 <div class="block">For tests, web ui and metrics.
  This method will only work if HRegionServer is in the same JVM as client;
  HRegion cannot be serialized to cross an rpc.</div>
@@ -3817,7 +3817,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2799">addRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2798">addRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MutableOnlineRegions.html#addRegion-org.apache.hadoop.hbase.regionserver.HRegion-">MutableOnlineRegions</a></code></span></div>
 <div class="block">Add to online regions.</div>
 <dl>
@@ -3832,7 +3832,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2804">addRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</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>,<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/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;&nbsp;sortedRegions,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2803">addRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</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>,<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/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;&nbsp;sortedRegions,
                

<TRUNCATED>

[09/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
index bf81ebb..a170ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
@@ -606,3246 +606,3245 @@
 <span class="sourceLineNo">598</span><a name="line.598"></a>
 <span class="sourceLineNo">599</span>      regionServerAccounting = new RegionServerAccounting(conf);<a name="line.599"></a>
 <span class="sourceLineNo">600</span>      boolean isMasterNotCarryTable =<a name="line.600"></a>
-<span class="sourceLineNo">601</span>          this instanceof HMaster &amp;&amp; !LoadBalancer.isTablesOnMaster(conf) &amp;&amp; !LoadBalancer<a name="line.601"></a>
-<span class="sourceLineNo">602</span>              .isSystemTablesOnlyOnMaster(conf);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      cacheConfig = new CacheConfig(conf, !isMasterNotCarryTable);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      mobCacheConfig = new MobCacheConfig(conf, !isMasterNotCarryTable);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      uncaughtExceptionHandler = new UncaughtExceptionHandler() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>        @Override<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        public void uncaughtException(Thread t, Throwable e) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>          abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        }<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      };<a name="line.610"></a>
-<span class="sourceLineNo">611</span><a name="line.611"></a>
-<span class="sourceLineNo">612</span>      initializeFileSystem();<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      spanReceiverHost = SpanReceiverHost.getInstance(getConfiguration());<a name="line.613"></a>
-<span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>      this.configurationManager = new ConfigurationManager();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      setupWindows(getConfiguration(), getConfigurationManager());<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>      // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>        // Open connection to zookeeper and set primary watcher<a name="line.620"></a>
-<span class="sourceLineNo">621</span>        zooKeeper = new ZKWatcher(conf, getProcessName() + ":" +<a name="line.621"></a>
-<span class="sourceLineNo">622</span>          rpcServices.isa.getPort(), this, canCreateBaseZNode());<a name="line.622"></a>
-<span class="sourceLineNo">623</span>        // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.623"></a>
-<span class="sourceLineNo">624</span>        if (!this.masterless) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>          this.csm = new ZkCoordinatedStateManager(this);<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span>          masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.627"></a>
-<span class="sourceLineNo">628</span>          masterAddressTracker.start();<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>          clusterStatusTracker = new ClusterStatusTracker(zooKeeper, this);<a name="line.630"></a>
-<span class="sourceLineNo">631</span>          clusterStatusTracker.start();<a name="line.631"></a>
-<span class="sourceLineNo">632</span>        } else {<a name="line.632"></a>
-<span class="sourceLineNo">633</span>          masterAddressTracker = null;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>          clusterStatusTracker = null;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>        }<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      } else {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>        zooKeeper = null;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        masterAddressTracker = null;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        clusterStatusTracker = null;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      }<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      this.rpcServices.start(zooKeeper);<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      // This violates 'no starting stuff in Constructor' but Master depends on the below chore<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      // and executor being created and takes a different startup route. Lots of overlap between HRS<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      // and M (An M IS A HRS now). Need to refactor so less duplication between M and its super<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      // Master expects Constructor to put up web servers. Ugh.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      // class HRS. TODO.<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      this.choreService = new ChoreService(getName(), true);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      this.executorService = new ExecutorService(getName());<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      putUpWebUI();<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    } catch (Throwable t) {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      // cause of failed startup is lost.<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      LOG.error("Failed construction RegionServer", t);<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      throw t;<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>  }<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span>  // HMaster should override this method to load the specific config for master<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    String hostname = conf.get(RS_HOSTNAME_KEY);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    if (conf.getBoolean(RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.662"></a>
-<span class="sourceLineNo">663</span>        String msg = RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and " + RS_HOSTNAME_KEY +<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          " are mutually exclusive. Do not set " + RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY +<a name="line.664"></a>
-<span class="sourceLineNo">665</span>          " to true while " + RS_HOSTNAME_KEY + " is used";<a name="line.665"></a>
-<span class="sourceLineNo">666</span>        throw new IOException(msg);<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      } else {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        return rpcServices.isa.getHostName();<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      }<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    } else {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>      return hostname;<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    }<a name="line.672"></a>
-<span class="sourceLineNo">673</span>  }<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span>  /**<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   * If running on Windows, do windows-specific setup.<a name="line.676"></a>
-<span class="sourceLineNo">677</span>   */<a name="line.677"></a>
-<span class="sourceLineNo">678</span>  private static void setupWindows(final Configuration conf, ConfigurationManager cm) {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    if (!SystemUtils.IS_OS_WINDOWS) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      Signal.handle(new Signal("HUP"), new SignalHandler() {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        @Override<a name="line.681"></a>
-<span class="sourceLineNo">682</span>        public void handle(Signal signal) {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          conf.reloadConfiguration();<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          cm.notifyAllObservers(conf);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>        }<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><a name="line.689"></a>
-<span class="sourceLineNo">690</span>  private static NettyEventLoopGroupConfig setupNetty(Configuration conf) {<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    // Initialize netty event loop group at start as we may use it for rpc server, rpc client &amp; WAL.<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    NettyEventLoopGroupConfig nelgc =<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      new NettyEventLoopGroupConfig(conf, "RS-EventLoopGroup");<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    NettyRpcClientConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    NettyAsyncFSWALConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    return nelgc;<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 void initializeFileSystem() throws IOException {<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    // Get fs instance used by this RS.  Do we use checksum verification in the hbase? If hbase<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    // checksum verification enabled, then automatically switch off hdfs checksum verification.<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    boolean useHBaseChecksum = conf.getBoolean(HConstants.HBASE_CHECKSUM_VERIFICATION, true);<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    FSUtils.setFsDefault(this.conf, FSUtils.getWALRootDir(this.conf));<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    this.walFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    this.walRootDir = FSUtils.getWALRootDir(this.conf);<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    // Set 'fs.defaultFS' to match the filesystem on hbase.rootdir else<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    // underlying hadoop hdfs accessors will be going against wrong filesystem<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    // (unless all is set to defaults).<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    FSUtils.setFsDefault(this.conf, FSUtils.getRootDir(this.conf));<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    this.fs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    this.rootDir = FSUtils.getRootDir(this.conf);<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    this.tableDescriptors = getFsTableDescriptors();<a name="line.712"></a>
-<span class="sourceLineNo">713</span>  }<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span>  protected TableDescriptors getFsTableDescriptors() throws IOException {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    return new FSTableDescriptors(this.conf,<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      this.fs, this.rootDir, !canUpdateTableDescriptor(), false, getMetaTableObserver());<a name="line.717"></a>
-<span class="sourceLineNo">718</span>  }<a name="line.718"></a>
-<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>  protected Function&lt;TableDescriptorBuilder, TableDescriptorBuilder&gt; getMetaTableObserver() {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    return null;<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  }<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    user.login("hbase.regionserver.keytab.file",<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      "hbase.regionserver.kerberos.principal", host);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>  }<a name="line.727"></a>
+<span class="sourceLineNo">601</span>          this instanceof HMaster &amp;&amp; !LoadBalancer.isTablesOnMaster(conf);<a name="line.601"></a>
+<span class="sourceLineNo">602</span>      cacheConfig = new CacheConfig(conf, !isMasterNotCarryTable);<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      mobCacheConfig = new MobCacheConfig(conf, !isMasterNotCarryTable);<a name="line.603"></a>
+<span class="sourceLineNo">604</span>      uncaughtExceptionHandler = new UncaughtExceptionHandler() {<a name="line.604"></a>
+<span class="sourceLineNo">605</span>        @Override<a name="line.605"></a>
+<span class="sourceLineNo">606</span>        public void uncaughtException(Thread t, Throwable e) {<a name="line.606"></a>
+<span class="sourceLineNo">607</span>          abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.607"></a>
+<span class="sourceLineNo">608</span>        }<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      };<a name="line.609"></a>
+<span class="sourceLineNo">610</span><a name="line.610"></a>
+<span class="sourceLineNo">611</span>      initializeFileSystem();<a name="line.611"></a>
+<span class="sourceLineNo">612</span>      spanReceiverHost = SpanReceiverHost.getInstance(getConfiguration());<a name="line.612"></a>
+<span class="sourceLineNo">613</span><a name="line.613"></a>
+<span class="sourceLineNo">614</span>      this.configurationManager = new ConfigurationManager();<a name="line.614"></a>
+<span class="sourceLineNo">615</span>      setupWindows(getConfiguration(), getConfigurationManager());<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span>      // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.617"></a>
+<span class="sourceLineNo">618</span>      if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>        // Open connection to zookeeper and set primary watcher<a name="line.619"></a>
+<span class="sourceLineNo">620</span>        zooKeeper = new ZKWatcher(conf, getProcessName() + ":" +<a name="line.620"></a>
+<span class="sourceLineNo">621</span>          rpcServices.isa.getPort(), this, canCreateBaseZNode());<a name="line.621"></a>
+<span class="sourceLineNo">622</span>        // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.622"></a>
+<span class="sourceLineNo">623</span>        if (!this.masterless) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>          this.csm = new ZkCoordinatedStateManager(this);<a name="line.624"></a>
+<span class="sourceLineNo">625</span><a name="line.625"></a>
+<span class="sourceLineNo">626</span>          masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.626"></a>
+<span class="sourceLineNo">627</span>          masterAddressTracker.start();<a name="line.627"></a>
+<span class="sourceLineNo">628</span><a name="line.628"></a>
+<span class="sourceLineNo">629</span>          clusterStatusTracker = new ClusterStatusTracker(zooKeeper, this);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>          clusterStatusTracker.start();<a name="line.630"></a>
+<span class="sourceLineNo">631</span>        } else {<a name="line.631"></a>
+<span class="sourceLineNo">632</span>          masterAddressTracker = null;<a name="line.632"></a>
+<span class="sourceLineNo">633</span>          clusterStatusTracker = null;<a name="line.633"></a>
+<span class="sourceLineNo">634</span>        }<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      } else {<a name="line.635"></a>
+<span class="sourceLineNo">636</span>        zooKeeper = null;<a name="line.636"></a>
+<span class="sourceLineNo">637</span>        masterAddressTracker = null;<a name="line.637"></a>
+<span class="sourceLineNo">638</span>        clusterStatusTracker = null;<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      }<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      this.rpcServices.start(zooKeeper);<a name="line.640"></a>
+<span class="sourceLineNo">641</span>      // This violates 'no starting stuff in Constructor' but Master depends on the below chore<a name="line.641"></a>
+<span class="sourceLineNo">642</span>      // and executor being created and takes a different startup route. Lots of overlap between HRS<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      // and M (An M IS A HRS now). Need to refactor so less duplication between M and its super<a name="line.643"></a>
+<span class="sourceLineNo">644</span>      // Master expects Constructor to put up web servers. Ugh.<a name="line.644"></a>
+<span class="sourceLineNo">645</span>      // class HRS. TODO.<a name="line.645"></a>
+<span class="sourceLineNo">646</span>      this.choreService = new ChoreService(getName(), true);<a name="line.646"></a>
+<span class="sourceLineNo">647</span>      this.executorService = new ExecutorService(getName());<a name="line.647"></a>
+<span class="sourceLineNo">648</span>      putUpWebUI();<a name="line.648"></a>
+<span class="sourceLineNo">649</span>    } catch (Throwable t) {<a name="line.649"></a>
+<span class="sourceLineNo">650</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      // cause of failed startup is lost.<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      LOG.error("Failed construction RegionServer", t);<a name="line.652"></a>
+<span class="sourceLineNo">653</span>      throw t;<a name="line.653"></a>
+<span class="sourceLineNo">654</span>    }<a name="line.654"></a>
+<span class="sourceLineNo">655</span>  }<a name="line.655"></a>
+<span class="sourceLineNo">656</span><a name="line.656"></a>
+<span class="sourceLineNo">657</span>  // HMaster should override this method to load the specific config for master<a name="line.657"></a>
+<span class="sourceLineNo">658</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.658"></a>
+<span class="sourceLineNo">659</span>    String hostname = conf.get(RS_HOSTNAME_KEY);<a name="line.659"></a>
+<span class="sourceLineNo">660</span>    if (conf.getBoolean(RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>        String msg = RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and " + RS_HOSTNAME_KEY +<a name="line.662"></a>
+<span class="sourceLineNo">663</span>          " are mutually exclusive. Do not set " + RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY +<a name="line.663"></a>
+<span class="sourceLineNo">664</span>          " to true while " + RS_HOSTNAME_KEY + " is used";<a name="line.664"></a>
+<span class="sourceLineNo">665</span>        throw new IOException(msg);<a name="line.665"></a>
+<span class="sourceLineNo">666</span>      } else {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>        return rpcServices.isa.getHostName();<a name="line.667"></a>
+<span class="sourceLineNo">668</span>      }<a name="line.668"></a>
+<span class="sourceLineNo">669</span>    } else {<a name="line.669"></a>
+<span class="sourceLineNo">670</span>      return hostname;<a name="line.670"></a>
+<span class="sourceLineNo">671</span>    }<a name="line.671"></a>
+<span class="sourceLineNo">672</span>  }<a name="line.672"></a>
+<span class="sourceLineNo">673</span><a name="line.673"></a>
+<span class="sourceLineNo">674</span>  /**<a name="line.674"></a>
+<span class="sourceLineNo">675</span>   * If running on Windows, do windows-specific setup.<a name="line.675"></a>
+<span class="sourceLineNo">676</span>   */<a name="line.676"></a>
+<span class="sourceLineNo">677</span>  private static void setupWindows(final Configuration conf, ConfigurationManager cm) {<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    if (!SystemUtils.IS_OS_WINDOWS) {<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      Signal.handle(new Signal("HUP"), new SignalHandler() {<a name="line.679"></a>
+<span class="sourceLineNo">680</span>        @Override<a name="line.680"></a>
+<span class="sourceLineNo">681</span>        public void handle(Signal signal) {<a name="line.681"></a>
+<span class="sourceLineNo">682</span>          conf.reloadConfiguration();<a name="line.682"></a>
+<span class="sourceLineNo">683</span>          cm.notifyAllObservers(conf);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>        }<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      });<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 static NettyEventLoopGroupConfig setupNetty(Configuration conf) {<a name="line.689"></a>
+<span class="sourceLineNo">690</span>    // Initialize netty event loop group at start as we may use it for rpc server, rpc client &amp; WAL.<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    NettyEventLoopGroupConfig nelgc =<a name="line.691"></a>
+<span class="sourceLineNo">692</span>      new NettyEventLoopGroupConfig(conf, "RS-EventLoopGroup");<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    NettyRpcClientConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    NettyAsyncFSWALConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    return nelgc;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>  }<a name="line.696"></a>
+<span class="sourceLineNo">697</span><a name="line.697"></a>
+<span class="sourceLineNo">698</span>  private void initializeFileSystem() throws IOException {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>    // Get fs instance used by this RS.  Do we use checksum verification in the hbase? If hbase<a name="line.699"></a>
+<span class="sourceLineNo">700</span>    // checksum verification enabled, then automatically switch off hdfs checksum verification.<a name="line.700"></a>
+<span class="sourceLineNo">701</span>    boolean useHBaseChecksum = conf.getBoolean(HConstants.HBASE_CHECKSUM_VERIFICATION, true);<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    FSUtils.setFsDefault(this.conf, FSUtils.getWALRootDir(this.conf));<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    this.walFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>    this.walRootDir = FSUtils.getWALRootDir(this.conf);<a name="line.704"></a>
+<span class="sourceLineNo">705</span>    // Set 'fs.defaultFS' to match the filesystem on hbase.rootdir else<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    // underlying hadoop hdfs accessors will be going against wrong filesystem<a name="line.706"></a>
+<span class="sourceLineNo">707</span>    // (unless all is set to defaults).<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    FSUtils.setFsDefault(this.conf, FSUtils.getRootDir(this.conf));<a name="line.708"></a>
+<span class="sourceLineNo">709</span>    this.fs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.709"></a>
+<span class="sourceLineNo">710</span>    this.rootDir = FSUtils.getRootDir(this.conf);<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    this.tableDescriptors = getFsTableDescriptors();<a name="line.711"></a>
+<span class="sourceLineNo">712</span>  }<a name="line.712"></a>
+<span class="sourceLineNo">713</span><a name="line.713"></a>
+<span class="sourceLineNo">714</span>  protected TableDescriptors getFsTableDescriptors() throws IOException {<a name="line.714"></a>
+<span class="sourceLineNo">715</span>    return new FSTableDescriptors(this.conf,<a name="line.715"></a>
+<span class="sourceLineNo">716</span>      this.fs, this.rootDir, !canUpdateTableDescriptor(), false, getMetaTableObserver());<a name="line.716"></a>
+<span class="sourceLineNo">717</span>  }<a name="line.717"></a>
+<span class="sourceLineNo">718</span><a name="line.718"></a>
+<span class="sourceLineNo">719</span>  protected Function&lt;TableDescriptorBuilder, TableDescriptorBuilder&gt; getMetaTableObserver() {<a name="line.719"></a>
+<span class="sourceLineNo">720</span>    return null;<a name="line.720"></a>
+<span class="sourceLineNo">721</span>  }<a name="line.721"></a>
+<span class="sourceLineNo">722</span><a name="line.722"></a>
+<span class="sourceLineNo">723</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.723"></a>
+<span class="sourceLineNo">724</span>    user.login("hbase.regionserver.keytab.file",<a name="line.724"></a>
+<span class="sourceLineNo">725</span>      "hbase.regionserver.kerberos.principal", host);<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><a name="line.729"></a>
-<span class="sourceLineNo">730</span>  /**<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * Wait for an active Master.<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   * See override in Master superclass for how it is used.<a name="line.732"></a>
-<span class="sourceLineNo">733</span>   */<a name="line.733"></a>
-<span class="sourceLineNo">734</span>  protected void waitForMasterActive() {}<a name="line.734"></a>
-<span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>  protected String getProcessName() {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    return REGIONSERVER;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  protected boolean canCreateBaseZNode() {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    return this.masterless;<a name="line.741"></a>
-<span class="sourceLineNo">742</span>  }<a name="line.742"></a>
-<span class="sourceLineNo">743</span><a name="line.743"></a>
-<span class="sourceLineNo">744</span>  protected boolean canUpdateTableDescriptor() {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    return false;<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
-<span class="sourceLineNo">747</span><a name="line.747"></a>
-<span class="sourceLineNo">748</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    return new RSRpcServices(this);<a name="line.749"></a>
-<span class="sourceLineNo">750</span>  }<a name="line.750"></a>
-<span class="sourceLineNo">751</span><a name="line.751"></a>
-<span class="sourceLineNo">752</span>  protected void configureInfoServer() {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    infoServer.addServlet("rs-status", "/rs-status", RSStatusServlet.class);<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    infoServer.setAttribute(REGIONSERVER, this);<a name="line.754"></a>
-<span class="sourceLineNo">755</span>  }<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    return RSDumpServlet.class;<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>  @Override<a name="line.761"></a>
-<span class="sourceLineNo">762</span>  public boolean registerService(com.google.protobuf.Service instance) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    /*<a name="line.763"></a>
-<span class="sourceLineNo">764</span>     * No stacking of instances is allowed for a single executorService name<a name="line.764"></a>
-<span class="sourceLineNo">765</span>     */<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    com.google.protobuf.Descriptors.ServiceDescriptor serviceDesc =<a name="line.766"></a>
-<span class="sourceLineNo">767</span>        instance.getDescriptorForType();<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      LOG.error("Coprocessor executorService " + serviceName<a name="line.770"></a>
-<span class="sourceLineNo">771</span>          + " already registered, rejecting request from " + instance);<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      return false;<a name="line.772"></a>
-<span class="sourceLineNo">773</span>    }<a name="line.773"></a>
-<span class="sourceLineNo">774</span><a name="line.774"></a>
-<span class="sourceLineNo">775</span>    coprocessorServiceHandlers.put(serviceName, instance);<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    if (LOG.isDebugEnabled()) {<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      LOG.debug("Registered regionserver coprocessor executorService: executorService=" + serviceName);<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    }<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    return true;<a name="line.779"></a>
-<span class="sourceLineNo">780</span>  }<a name="line.780"></a>
-<span class="sourceLineNo">781</span><a name="line.781"></a>
-<span class="sourceLineNo">782</span>  /**<a name="line.782"></a>
-<span class="sourceLineNo">783</span>   * Create a 'smarter' Connection, one that is capable of by-passing RPC if the request is to<a name="line.783"></a>
-<span class="sourceLineNo">784</span>   * the local server; i.e. a short-circuit Connection. Safe to use going to local or remote<a name="line.784"></a>
-<span class="sourceLineNo">785</span>   * server. Create this instance in a method can be intercepted and mocked in tests.<a name="line.785"></a>
-<span class="sourceLineNo">786</span>   * @throws IOException<a name="line.786"></a>
-<span class="sourceLineNo">787</span>   */<a name="line.787"></a>
-<span class="sourceLineNo">788</span>  @VisibleForTesting<a name="line.788"></a>
-<span class="sourceLineNo">789</span>  protected ClusterConnection createClusterConnection() throws IOException {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    Configuration conf = this.conf;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    if (conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM) != null) {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      // Use server ZK cluster for server-issued connections, so we clone<a name="line.792"></a>
-<span class="sourceLineNo">793</span>      // the conf and unset the client ZK related properties<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      conf = new Configuration(this.conf);<a name="line.794"></a>
-<span class="sourceLineNo">795</span>      conf.unset(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>    }<a name="line.796"></a>
-<span class="sourceLineNo">797</span>    // Create a cluster connection that when appropriate, can short-circuit and go directly to the<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    // local server if the request is to the local server bypassing RPC. Can be used for both local<a name="line.798"></a>
-<span class="sourceLineNo">799</span>    // and remote invocations.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    return ConnectionUtils.createShortCircuitConnection(conf, null, userProvider.getCurrent(),<a name="line.800"></a>
-<span class="sourceLineNo">801</span>      serverName, rpcServices, rpcServices);<a name="line.801"></a>
-<span class="sourceLineNo">802</span>  }<a name="line.802"></a>
-<span class="sourceLineNo">803</span><a name="line.803"></a>
-<span class="sourceLineNo">804</span>  /**<a name="line.804"></a>
-<span class="sourceLineNo">805</span>   * Run test on configured codecs to make sure supporting libs are in place.<a name="line.805"></a>
-<span class="sourceLineNo">806</span>   * @param c<a name="line.806"></a>
-<span class="sourceLineNo">807</span>   * @throws IOException<a name="line.807"></a>
-<span class="sourceLineNo">808</span>   */<a name="line.808"></a>
-<span class="sourceLineNo">809</span>  private static void checkCodecs(final Configuration c) throws IOException {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    // check to see if the codec list is available:<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    String [] codecs = c.getStrings("hbase.regionserver.codecs", (String[])null);<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    if (codecs == null) return;<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    for (String codec : codecs) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>      if (!CompressionTest.testCompression(codec)) {<a name="line.814"></a>
-<span class="sourceLineNo">815</span>        throw new IOException("Compression codec " + codec +<a name="line.815"></a>
-<span class="sourceLineNo">816</span>          " not supported, aborting RS construction");<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      }<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
-<span class="sourceLineNo">819</span>  }<a name="line.819"></a>
-<span class="sourceLineNo">820</span><a name="line.820"></a>
-<span class="sourceLineNo">821</span>  public String getClusterId() {<a name="line.821"></a>
-<span class="sourceLineNo">822</span>    return this.clusterId;<a name="line.822"></a>
-<span class="sourceLineNo">823</span>  }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>  /**<a name="line.825"></a>
-<span class="sourceLineNo">826</span>   * Setup our cluster connection if not already initialized.<a name="line.826"></a>
-<span class="sourceLineNo">827</span>   * @throws IOException<a name="line.827"></a>
-<span class="sourceLineNo">828</span>   */<a name="line.828"></a>
-<span class="sourceLineNo">829</span>  protected synchronized void setupClusterConnection() throws IOException {<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    if (clusterConnection == null) {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>      clusterConnection = createClusterConnection();<a name="line.831"></a>
-<span class="sourceLineNo">832</span>      metaTableLocator = new MetaTableLocator();<a name="line.832"></a>
-<span class="sourceLineNo">833</span>    }<a name="line.833"></a>
-<span class="sourceLineNo">834</span>  }<a name="line.834"></a>
-<span class="sourceLineNo">835</span><a name="line.835"></a>
-<span class="sourceLineNo">836</span>  /**<a name="line.836"></a>
-<span class="sourceLineNo">837</span>   * All initialization needed before we go register with Master.&lt;br&gt;<a name="line.837"></a>
-<span class="sourceLineNo">838</span>   * Do bare minimum. Do bulk of initializations AFTER we've connected to the Master.&lt;br&gt;<a name="line.838"></a>
-<span class="sourceLineNo">839</span>   * In here we just put up the RpcServer, setup Connection, and ZooKeeper.<a name="line.839"></a>
-<span class="sourceLineNo">840</span>   */<a name="line.840"></a>
-<span class="sourceLineNo">841</span>  private void preRegistrationInitialization() {<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    try {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      initializeZooKeeper();<a name="line.843"></a>
-<span class="sourceLineNo">844</span>      setupClusterConnection();<a name="line.844"></a>
-<span class="sourceLineNo">845</span>      // Setup RPC client for master communication<a name="line.845"></a>
-<span class="sourceLineNo">846</span>      this.rpcClient = RpcClientFactory.createClient(conf, clusterId, new InetSocketAddress(<a name="line.846"></a>
-<span class="sourceLineNo">847</span>          this.rpcServices.isa.getAddress(), 0), clusterConnection.getConnectionMetrics());<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    } catch (Throwable t) {<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      // Call stop if error or process will stick around for ever since server<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      // puts up non-daemon threads.<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      this.rpcServices.stop();<a name="line.851"></a>
-<span class="sourceLineNo">852</span>      abort("Initialization of RS failed.  Hence aborting RS.", t);<a name="line.852"></a>
-<span class="sourceLineNo">853</span>    }<a name="line.853"></a>
-<span class="sourceLineNo">854</span>  }<a name="line.854"></a>
-<span class="sourceLineNo">855</span><a name="line.855"></a>
-<span class="sourceLineNo">856</span>  /**<a name="line.856"></a>
-<span class="sourceLineNo">857</span>   * Bring up connection to zk ensemble and then wait until a master for this cluster and then after<a name="line.857"></a>
-<span class="sourceLineNo">858</span>   * that, wait until cluster 'up' flag has been set. This is the order in which master does things.<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * &lt;p&gt;<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * Finally open long-living server short-circuit connection.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   */<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE",<a name="line.862"></a>
-<span class="sourceLineNo">863</span>    justification="cluster Id znode read would give us correct response")<a name="line.863"></a>
-<span class="sourceLineNo">864</span>  private void initializeZooKeeper() throws IOException, InterruptedException {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>    // Nothing to do in here if no Master in the mix.<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    if (this.masterless) {<a name="line.866"></a>
-<span class="sourceLineNo">867</span>      return;<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    }<a name="line.868"></a>
-<span class="sourceLineNo">869</span><a name="line.869"></a>
-<span class="sourceLineNo">870</span>    // Create the master address tracker, register with zk, and start it.  Then<a name="line.870"></a>
-<span class="sourceLineNo">871</span>    // block until a master is available.  No point in starting up if no master<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    // running.<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    blockAndCheckIfStopped(this.masterAddressTracker);<a name="line.873"></a>
-<span class="sourceLineNo">874</span><a name="line.874"></a>
-<span class="sourceLineNo">875</span>    // Wait on cluster being up.  Master will set this flag up in zookeeper<a name="line.875"></a>
-<span class="sourceLineNo">876</span>    // when ready.<a name="line.876"></a>
-<span class="sourceLineNo">877</span>    blockAndCheckIfStopped(this.clusterStatusTracker);<a name="line.877"></a>
-<span class="sourceLineNo">878</span><a name="line.878"></a>
-<span class="sourceLineNo">879</span>    // If we are HMaster then the cluster id should have already been set.<a name="line.879"></a>
-<span class="sourceLineNo">880</span>    if (clusterId == null) {<a name="line.880"></a>
-<span class="sourceLineNo">881</span>      // Retrieve clusterId<a name="line.881"></a>
-<span class="sourceLineNo">882</span>      // Since cluster status is now up<a name="line.882"></a>
-<span class="sourceLineNo">883</span>      // ID should have already been set by HMaster<a name="line.883"></a>
-<span class="sourceLineNo">884</span>      try {<a name="line.884"></a>
-<span class="sourceLineNo">885</span>        clusterId = ZKClusterId.readClusterIdZNode(this.zooKeeper);<a name="line.885"></a>
-<span class="sourceLineNo">886</span>        if (clusterId == null) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>          this.abort("Cluster ID has not been set");<a name="line.887"></a>
-<span class="sourceLineNo">888</span>        }<a name="line.888"></a>
-<span class="sourceLineNo">889</span>        LOG.info("ClusterId : " + clusterId);<a name="line.889"></a>
-<span class="sourceLineNo">890</span>      } catch (KeeperException e) {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>        this.abort("Failed to retrieve Cluster ID", e);<a name="line.891"></a>
-<span class="sourceLineNo">892</span>      }<a name="line.892"></a>
-<span class="sourceLineNo">893</span>    }<a name="line.893"></a>
-<span class="sourceLineNo">894</span><a name="line.894"></a>
-<span class="sourceLineNo">895</span>    waitForMasterActive();<a name="line.895"></a>
-<span class="sourceLineNo">896</span>    if (isStopped() || isAborted()) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      return; // No need for further initialization<a name="line.897"></a>
-<span class="sourceLineNo">898</span>    }<a name="line.898"></a>
-<span class="sourceLineNo">899</span><a name="line.899"></a>
-<span class="sourceLineNo">900</span>    // watch for snapshots and other procedures<a name="line.900"></a>
-<span class="sourceLineNo">901</span>    try {<a name="line.901"></a>
-<span class="sourceLineNo">902</span>      rspmHost = new RegionServerProcedureManagerHost();<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      rspmHost.loadProcedures(conf);<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      rspmHost.initialize(this);<a name="line.904"></a>
-<span class="sourceLineNo">905</span>    } catch (KeeperException e) {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>      this.abort("Failed to reach coordination cluster when creating procedure handler.", e);<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><a name="line.909"></a>
-<span class="sourceLineNo">910</span>  /**<a name="line.910"></a>
-<span class="sourceLineNo">911</span>   * Utilty method to wait indefinitely on a znode availability while checking<a name="line.911"></a>
-<span class="sourceLineNo">912</span>   * if the region server is shut down<a name="line.912"></a>
-<span class="sourceLineNo">913</span>   * @param tracker znode tracker to use<a name="line.913"></a>
-<span class="sourceLineNo">914</span>   * @throws IOException any IO exception, plus if the RS is stopped<a name="line.914"></a>
-<span class="sourceLineNo">915</span>   * @throws InterruptedException<a name="line.915"></a>
-<span class="sourceLineNo">916</span>   */<a name="line.916"></a>
-<span class="sourceLineNo">917</span>  private void blockAndCheckIfStopped(ZKNodeTracker tracker)<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      throws IOException, InterruptedException {<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    while (tracker.blockUntilAvailable(this.msgInterval, false) == null) {<a name="line.919"></a>
-<span class="sourceLineNo">920</span>      if (this.stopped) {<a name="line.920"></a>
-<span class="sourceLineNo">921</span>        throw new IOException("Received the shutdown message while waiting.");<a name="line.921"></a>
-<span class="sourceLineNo">922</span>      }<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    }<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  }<a name="line.924"></a>
-<span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>  /**<a name="line.926"></a>
-<span class="sourceLineNo">927</span>   * @return True if the cluster is up.<a name="line.927"></a>
-<span class="sourceLineNo">928</span>   */<a name="line.928"></a>
-<span class="sourceLineNo">929</span>  @Override<a name="line.929"></a>
-<span class="sourceLineNo">930</span>  public boolean isClusterUp() {<a name="line.930"></a>
-<span class="sourceLineNo">931</span>    return this.masterless ||<a name="line.931"></a>
-<span class="sourceLineNo">932</span>        (this.clusterStatusTracker != null &amp;&amp; this.clusterStatusTracker.isClusterUp());<a name="line.932"></a>
-<span class="sourceLineNo">933</span>  }<a name="line.933"></a>
-<span class="sourceLineNo">934</span><a name="line.934"></a>
-<span class="sourceLineNo">935</span>  /**<a name="line.935"></a>
-<span class="sourceLineNo">936</span>   * The HRegionServer sticks in this loop until closed.<a name="line.936"></a>
-<span class="sourceLineNo">937</span>   */<a name="line.937"></a>
-<span class="sourceLineNo">938</span>  @Override<a name="line.938"></a>
-<span class="sourceLineNo">939</span>  public void run() {<a name="line.939"></a>
-<span class="sourceLineNo">940</span>    try {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>      // Do pre-registration initializations; zookeeper, lease threads, etc.<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      preRegistrationInitialization();<a name="line.942"></a>
-<span class="sourceLineNo">943</span>    } catch (Throwable e) {<a name="line.943"></a>
-<span class="sourceLineNo">944</span>      abort("Fatal exception during initialization", e);<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    }<a name="line.945"></a>
-<span class="sourceLineNo">946</span><a name="line.946"></a>
-<span class="sourceLineNo">947</span>    try {<a name="line.947"></a>
-<span class="sourceLineNo">948</span>      if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.948"></a>
-<span class="sourceLineNo">949</span>        ShutdownHook.install(conf, fs, this, Thread.currentThread());<a name="line.949"></a>
-<span class="sourceLineNo">950</span>        // Initialize the RegionServerCoprocessorHost now that our ephemeral<a name="line.950"></a>
-<span class="sourceLineNo">951</span>        // node was created, in case any coprocessors want to use ZooKeeper<a name="line.951"></a>
-<span class="sourceLineNo">952</span>        this.rsHost = new RegionServerCoprocessorHost(this, this.conf);<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      }<a name="line.953"></a>
-<span class="sourceLineNo">954</span><a name="line.954"></a>
-<span class="sourceLineNo">955</span>      // Try and register with the Master; tell it we are here.  Break if server is stopped or the<a name="line.955"></a>
-<span class="sourceLineNo">956</span>      // clusterup flag is down or hdfs went wacky. Once registered successfully, go ahead and start<a name="line.956"></a>
-<span class="sourceLineNo">957</span>      // up all Services. Use RetryCounter to get backoff in case Master is struggling to come up.<a name="line.957"></a>
-<span class="sourceLineNo">958</span>      LOG.debug("About to register with Master.");<a name="line.958"></a>
-<span class="sourceLineNo">959</span>      RetryCounterFactory rcf = new RetryCounterFactory(Integer.MAX_VALUE,<a name="line.959"></a>
-<span class="sourceLineNo">960</span>          this.sleeper.getPeriod(), 1000 * 60 * 5);<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      RetryCounter rc = rcf.create();<a name="line.961"></a>
-<span class="sourceLineNo">962</span>      while (keepLooping()) {<a name="line.962"></a>
-<span class="sourceLineNo">963</span>        RegionServerStartupResponse w = reportForDuty();<a name="line.963"></a>
-<span class="sourceLineNo">964</span>        if (w == null) {<a name="line.964"></a>
-<span class="sourceLineNo">965</span>          long sleepTime = rc.getBackoffTimeAndIncrementAttempts();<a name="line.965"></a>
-<span class="sourceLineNo">966</span>          LOG.warn("reportForDuty failed; sleeping {} ms and then retrying.", sleepTime);<a name="line.966"></a>
-<span class="sourceLineNo">967</span>          this.sleeper.sleep(sleepTime);<a name="line.967"></a>
-<span class="sourceLineNo">968</span>        } else {<a name="line.968"></a>
-<span class="sourceLineNo">969</span>          handleReportForDutyResponse(w);<a name="line.969"></a>
-<span class="sourceLineNo">970</span>          break;<a name="line.970"></a>
-<span class="sourceLineNo">971</span>        }<a name="line.971"></a>
-<span class="sourceLineNo">972</span>      }<a name="line.972"></a>
-<span class="sourceLineNo">973</span><a name="line.973"></a>
-<span class="sourceLineNo">974</span>      if (!isStopped() &amp;&amp; isHealthy()) {<a name="line.974"></a>
-<span class="sourceLineNo">975</span>        // start the snapshot handler and other procedure handlers,<a name="line.975"></a>
-<span class="sourceLineNo">976</span>        // since the server is ready to run<a name="line.976"></a>
-<span class="sourceLineNo">977</span>        if (this.rspmHost != null) {<a name="line.977"></a>
-<span class="sourceLineNo">978</span>          this.rspmHost.start();<a name="line.978"></a>
-<span class="sourceLineNo">979</span>        }<a name="line.979"></a>
-<span class="sourceLineNo">980</span>        // Start the Quota Manager<a name="line.980"></a>
-<span class="sourceLineNo">981</span>        if (this.rsQuotaManager != null) {<a name="line.981"></a>
-<span class="sourceLineNo">982</span>          rsQuotaManager.start(getRpcServer().getScheduler());<a name="line.982"></a>
-<span class="sourceLineNo">983</span>        }<a name="line.983"></a>
-<span class="sourceLineNo">984</span>        if (this.rsSpaceQuotaManager != null) {<a name="line.984"></a>
-<span class="sourceLineNo">985</span>          this.rsSpaceQuotaManager.start();<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        }<a name="line.986"></a>
-<span class="sourceLineNo">987</span>      }<a name="line.987"></a>
-<span class="sourceLineNo">988</span><a name="line.988"></a>
-<span class="sourceLineNo">989</span>      // We registered with the Master.  Go into run mode.<a name="line.989"></a>
-<span class="sourceLineNo">990</span>      long lastMsg = System.currentTimeMillis();<a name="line.990"></a>
-<span class="sourceLineNo">991</span>      long oldRequestCount = -1;<a name="line.991"></a>
-<span class="sourceLineNo">992</span>      // The main run loop.<a name="line.992"></a>
-<span class="sourceLineNo">993</span>      while (!isStopped() &amp;&amp; isHealthy()) {<a name="line.993"></a>
-<span class="sourceLineNo">994</span>        if (!isClusterUp()) {<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          if (isOnlineRegionsEmpty()) {<a name="line.995"></a>
-<span class="sourceLineNo">996</span>            stop("Exiting; cluster shutdown set and not carrying any regions");<a name="line.996"></a>
-<span class="sourceLineNo">997</span>          } else if (!this.stopping) {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>            this.stopping = true;<a name="line.998"></a>
-<span class="sourceLineNo">999</span>            LOG.info("Closing user regions");<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>            closeUserRegions(this.abortRequested);<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>          } else if (this.stopping) {<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>            boolean allUserRegionsOffline = areAllUserRegionsOffline();<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>            if (allUserRegionsOffline) {<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>              // Set stopped if no more write requests tp meta tables<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>              // since last time we went around the loop.  Any open<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>              // meta regions will be closed on our way out.<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>              if (oldRequestCount == getWriteRequestCount()) {<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>                stop("Stopped; only catalog regions remaining online");<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>                break;<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>              }<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>              oldRequestCount = getWriteRequestCount();<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>            } else {<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>              // Make sure all regions have been closed -- some regions may<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>              // have not got it because we were splitting at the time of<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>              // the call to closeUserRegions.<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>              closeUserRegions(this.abortRequested);<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>            }<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>            LOG.debug("Waiting on " + getOnlineRegionsAsPrintableString());<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>          }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>        }<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>        long now = System.currentTimeMillis();<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>        if ((now - lastMsg) &gt;= msgInterval) {<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>          tryRegionServerReport(lastMsg, now);<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>          lastMsg = System.currentTimeMillis();<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>        }<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>        if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>          this.sleeper.sleep();<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>        }<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>      } // for<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    } catch (Throwable t) {<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      if (!rpcServices.checkOOME(t)) {<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>        String prefix = t instanceof YouAreDeadException? "": "Unhandled: ";<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        abort(prefix + t.getMessage(), t);<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      }<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>    }<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span><a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>    if (abortRequested) {<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>      Timer abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      TimerTask abortTimeoutTask = null;<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>      try {<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>        abortTimeoutTask =<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>            Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>                .asSubclass(TimerTask.class).getDeclaredConstructor().newInstance();<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>      } catch (Exception e) {<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>      }<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>      if (abortTimeoutTask != null) {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>      }<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span><a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    if (this.leases != null) {<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>      this.leases.closeAfterLeasesExpire();<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>    }<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    if (this.splitLogWorker != null) {<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>      splitLogWorker.stop();<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    }<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    if (this.infoServer != null) {<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      LOG.info("Stopping infoServer");<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      try {<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>        this.infoServer.stop();<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>      } catch (Exception e) {<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>        LOG.error("Failed to stop infoServer", e);<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>      }<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    }<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    // Send cache a shutdown.<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    if (cacheConfig != null &amp;&amp; cacheConfig.isBlockCacheEnabled()) {<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>      cacheConfig.getBlockCache().shutdown();<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>    }<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    mobCacheConfig.getMobFileCache().shutdown();<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span><a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    if (movedRegionsCleaner != null) {<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>      movedRegionsCleaner.stop("Region Server stopping");<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>    // Send interrupts to wake up threads if sleeping so they notice shutdown.<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    // TODO: Should we check they are alive? If OOME could have exited already<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>    if (this.hMemManager != null) this.hMemManager.stop();<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    if (this.cacheFlusher != null) this.cacheFlusher.interruptIfNecessary();<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    if (this.compactSplitThread != null) this.compactSplitThread.interruptIfNecessary();<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>    sendShutdownInterrupt();<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span><a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>    // Stop the snapshot and other procedure handlers, forcefully killing all running tasks<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>    if (rspmHost != null) {<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>      rspmHost.stop(this.abortRequested || this.killed);<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    }<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span><a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    if (this.killed) {<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>      // Just skip out w/o closing regions.  Used when testing.<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    } else if (abortRequested) {<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>      if (this.fsOk) {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>        closeUserRegions(abortRequested); // Don't leave any open file handles<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      }<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>      LOG.info("aborting server " + this.serverName);<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    } else {<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      closeUserRegions(abortRequested);<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>      LOG.info("stopping server " + this.serverName);<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>    // so callers waiting for meta without timeout can stop<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    if (this.metaTableLocator != null) this.metaTableLocator.stop();<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    if (this.clusterConnection != null &amp;&amp; !clusterConnection.isClosed()) {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>      try {<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>        this.clusterConnection.close();<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>      } catch (IOException e) {<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>        // Although the {@link Closeable} interface throws an {@link<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>        // IOException}, in reality, the implementation would never do that.<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>        LOG.warn("Attempt to close server's short circuit ClusterConnection failed.", e);<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      }<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    }<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span><a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>    // Closing the compactSplit thread before closing meta regions<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>    if (!this.killed &amp;&amp; containsMetaTableRegions()) {<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>      if (!abortRequested || this.fsOk) {<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>        if (this.compactSplitThread != null) {<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>          this.compactSplitThread.join();<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>          this.compactSplitThread = null;<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>        }<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>        closeMetaTableRegions(abortRequested);<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>      }<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>    }<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span><a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    if (!this.killed &amp;&amp; this.fsOk) {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>      waitOnAllRegionsToClose(abortRequested);<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>      LOG.info("stopping server " + this.serverName + "; all regions closed.");<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>    // Stop the quota manager<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    if (rsQuotaManager != null) {<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>      rsQuotaManager.stop();<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    }<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    if (rsSpaceQuotaManager != null) {<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>      rsSpaceQuotaManager.stop();<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>      rsSpaceQuotaManager = null;<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>    //fsOk flag may be changed when closing regions throws exception.<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>    if (this.fsOk) {<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>      shutdownWAL(!abortRequested);<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>    // Make sure the proxy is down.<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    if (this.rssStub != null) {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>      this.rssStub = null;<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>    }<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    if (this.lockStub != null) {<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>      this.lockStub = null;<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>    }<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    if (this.rpcClient != null) {<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>      this.rpcClient.close();<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    }<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>    if (this.leases != null) {<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>      this.leases.close();<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>    }<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>    if (this.pauseMonitor != null) {<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>      this.pauseMonitor.stop();<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    }<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span><a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    if (!killed) {<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      stopServiceThreads();<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>    if (this.rpcServices != null) {<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      this.rpcServices.stop();<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>    try {<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>      deleteMyEphemeralNode();<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    } catch (KeeperException.NoNodeException nn) {<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>    } catch (KeeperException e) {<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>      LOG.warn("Failed deleting my ephemeral node", e);<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>    }<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    // We may have failed to delete the znode at the previous step, but<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>    //  we delete the file anyway: a second attempt to delete the znode is likely to fail again.<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    ZNodeClearer.deleteMyEphemeralNodeOnDisk();<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span><a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    if (this.zooKeeper != null) {<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>      this.zooKeeper.close();<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    }<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>    this.shutDown = true;<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>    LOG.info("Exiting; stopping=" + this.serverName + "; zookeeper connection closed.");<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>  private boolean containsMetaTableRegions() {<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    return onlineRegions.containsKey(RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedName());<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>  private boolean areAllUserRegionsOffline() {<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>    if (getNumberOfOnlineRegions() &gt; 2) return false;<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>    boolean allUserRegionsOffline = true;<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>      if (!e.getValue().getRegionInfo().isMetaRegion()) {<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>        allUserRegionsOffline = false;<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>        break;<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      }<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>    }<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>    return allUserRegionsOffline;<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>  /**<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>   * @return Current write count for all online regions.<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>   */<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>  private long getWriteRequestCount() {<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>    long writeCount = 0;<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>      writeCount += e.getValue().getWriteRequestsCount();<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>    }<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>    return writeCount;<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>  @VisibleForTesting<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>  protected void tryRegionServerReport(long reportStartTime, long reportEndTime)<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>      throws IOException {<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>    if (rss == null) {<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>      // the current server could be stopping.<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>      return;<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>    }<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>    ClusterStatusProtos.ServerLoad sl = buildServerLoad(reportStartTime, reportEndTime);<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>    try {<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>      RegionServerReportRequest.Builder request = RegionServerReportRequest.newBuilder();<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>      request.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>      request.setLoad(sl);<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>      rss.regionServerReport(null, request.build());<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>    } catch (ServiceException se) {<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>        // This will be caught and handled as a fatal error in run()<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>        throw ioe;<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>      }<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>      if (rssStub == rss) {<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>        rssStub = null;<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>      }<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>      // Method blocks until new master is found or we are stopped<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>      createRegionServerStatusStub(true);<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>    }<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>  }<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span><a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>  /**<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>   *<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>   * @param regionSizeStore The store containing region sizes<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>   */<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>    if (rss == null) {<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>      // the current server could be stopping.<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>      return true;<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    }<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>    try {<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>    } catch (ServiceException se) {<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>            + " This will be retried.", ioe);<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>        return true;<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>      }<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      if (rssStub == rss) {<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>        rssStub = null;<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>      }<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>      createRegionServerStatusStub(true);<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>            return false;<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>          }<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>        }<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>      }<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>    }<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>    return true;<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>  }<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span><a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>  /**<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>   *<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>   * @param rss The stub to send to the Master<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>   * @param regionSizeStore The store containing region sizes<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>   */<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>  void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>    RegionSpaceUseReportRequest request =<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>    // Record the number of size reports sent<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>    if (metricsRegionServer != null) {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>    }<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>  }<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span><a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>  /**<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>   *<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>   * @param regionSizes The size in bytes of regions<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>   * @return The corresponding protocol buffer message.<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>   */<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>    }<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>    return request.build();<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>  }<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span><a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>  /**<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>   * protobuf message.<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>   *<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>   * @param regionInfo The RegionInfo<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>   * @return The protocol buffer<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>   */<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>    return RegionSpaceUse.newBuilder()<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>        .build();<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>  }<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span><a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>  ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>      throws IOException {<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>    // the wrapper to compute those numbers in one place.<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    // history.<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>    long usedMemory = -1L;<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>    long maxMemory = -1L;<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>    if (usage != null) {<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>      usedMemory = usage.getUsed();<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>      maxMemory = usage.getMax();<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>    }<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span><a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1348"><

<TRUNCATED>

[19/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/ChunkCreator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/ChunkCreator.html b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/ChunkCreator.html
index 4ac08e4..f855f94 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/ChunkCreator.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/ChunkCreator.html
@@ -120,7 +120,7 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>(package private) static <a href="../../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.html" title="class in org.apache.hadoop.hbase.regionserver">ChunkCreator</a></code></td>
+<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.html" title="class in org.apache.hadoop.hbase.regionserver">ChunkCreator</a></code></td>
 <td class="colLast"><span class="typeNameLabel">ChunkCreator.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.html#getInstance--">getInstance</a></span>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/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 bc94426..f6016f6 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -716,19 +716,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.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/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.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/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/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/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/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/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/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/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/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/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/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
 </ul>
 </li>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/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 feee307..46651a5 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/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>
 <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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/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/0f0847e0/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index dfa02b5..6ef281d 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/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/0f0847e0/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..2853d09 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -199,9 +199,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/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>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/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 611aa2f..13de0ed 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/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.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/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/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/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/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 3a98f8a..7322b51 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -18,9 +18,9 @@
 <span class="sourceLineNo">010</span>  public static final String version = "3.0.0-SNAPSHOT";<a name="line.10"></a>
 <span class="sourceLineNo">011</span>  public static final String revision = "";<a name="line.11"></a>
 <span class="sourceLineNo">012</span>  public static final String user = "jenkins";<a name="line.12"></a>
-<span class="sourceLineNo">013</span>  public static final String date = "Tue Oct 30 14:45:37 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Thu Nov  1 14:45:06 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 = "342536f8882440a77775ed3eaa89894b";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "84371b476c7f3a2afe7b0844f6a3493f";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 


[03/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/downloads.html
----------------------------------------------------------------------
diff --git a/downloads.html b/downloads.html
index 2df13e3..aed7032 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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" />
@@ -329,7 +329,7 @@ under the License. -->
 <tr class="b">
       
 <td style="test-align: left">
-        2.1.0
+        2.1.1
       </td>
       
 <td style="test-align: left">
@@ -337,21 +337,21 @@ under the License. -->
       </td>
       
 <td style="test-align: left">
-        <a class="externalLink" href="https://apache.org/dist/hbase/2.1.0/compatibility_report_2.0.0vs2.1.0.html">2.0.0 vs 2.1.0</a>
+        <a class="externalLink" href="https://apache.org/dist/hbase/2.1.1/compatibility_report_2.1.0_vs_2.1.1.html">2.1.0 vs 2.1.1</a>
       </td>
       
 <td style="test-align: left">
-        <a class="externalLink" href="https://apache.org/dist/hbase/2.1.0/CHANGES.md">Changes</a>
+        <a class="externalLink" href="https://apache.org/dist/hbase/2.1.1/CHANGES.md">Changes</a>
       </td>
       
 <td style="test-align: left">
-        <a class="externalLink" href="https://apache.org/dist/hbase/2.1.0/RELEASENOTES.md">Release Notes</a>
+        <a class="externalLink" href="https://apache.org/dist/hbase/2.1.1/RELEASENOTES.md">Release Notes</a>
       </td>
       
 <td style="test-align: left">
-        <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/hbase/2.1.0/hbase-2.1.0-src.tar.gz">src</a> (<a class="externalLink" href="https://apache.org/dist/hbase/2.1.0/hbase-2.1.0-src.tar.gz.sha512">sha512</a> <a class="externalLink" href="https://apache.org/dist/hbase/2.1.0/hbase-2.1.0-src.tar.gz.asc">asc</a>) <br />
-        <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/hbase/2.1.0/hbase-2.1.0-bin.tar.gz">bin</a> (<a class="externalLink" href="https://apache.org/dist/hbase/2.1.0/hbase-2.1.0-bin.tar.gz.sha512">sha512</a> <a class="externalLink" href="https://apache.org/dist/hbase/2.1.0/hbase-2.1.0-bin.tar.gz.asc">asc</a>) <br />
-        <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/hbase/2.1.0/hbase-2.1.0-client-bin.tar.gz">client-bin</a> (<a class="externalLink" href="https://apache.org/dist/hbase/2.1.0/hbase-2.1.0-client-bin.tar.gz.sha512">sha512</a> <a class="externalLink" href="https://apache.org/dist/hbase/2.1.0/hbase-2.1.0-client-bin.tar.gz.asc">asc</a>)
+        <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/hbase/2.1.1/hbase-2.1.1-src.tar.gz">src</a> (<a class="externalLink" href="https://apache.org/dist/hbase/2.1.1/hbase-2.1.1-src.tar.gz.sha512">sha512</a> <a class="externalLink" href="https://apache.org/dist/hbase/2.1.1/hbase-2.1.1-src.tar.gz.asc">asc</a>) <br />
+        <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/hbase/2.1.1/hbase-2.1.1-bin.tar.gz">bin</a> (<a class="externalLink" href="https://apache.org/dist/hbase/2.1.1/hbase-2.1.1-bin.tar.gz.sha512">sha512</a> <a class="externalLink" href="https://apache.org/dist/hbase/2.1.1/hbase-2.1.1-bin.tar.gz.asc">asc</a>) <br />
+        <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/hbase/2.1.1/hbase-2.1.1-client-bin.tar.gz">client-bin</a> (<a class="externalLink" href="https://apache.org/dist/hbase/2.1.1/hbase-2.1.1-client-bin.tar.gz.sha512">sha512</a> <a class="externalLink" href="https://apache.org/dist/hbase/2.1.1/hbase-2.1.1-client-bin.tar.gz.asc">asc</a>)
       </td>
     </tr>
     
@@ -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-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index 0433817..4bcee2a 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index 1e272ec..fefed85 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index 62905d1..a30a76a 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index 5674af0..12709ef 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index e8cc0db..92dd466 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index 6c284e4..c8364df 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index ef95c8c..15d5abe 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index 98d2efa..c26c5ce 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index ce9f79e..f486cf0 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 8738721..311f606 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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" />
@@ -385,7 +385,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index 40e18b5..99feb72 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index 5305121..084c91d 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index 599be0c..cc8d79a 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index 362c53a..dbf5c00 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 86b82a7..437cd21 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index 7e496d9..e5da8bc 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index f8d9440..1ed9d74 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index da99915..6637fcd 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 2850d79..e6fc54a 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index f4dc3d6..d1249ad 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index 2fb139a..e1ccc7c 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="20181030" />
+    <meta name="Date-Revision-yyyymmdd" content="20181101" />
     <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" />
@@ -770,7 +770,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-10-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/testdevapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-frame.html b/testdevapidocs/allclasses-frame.html
index 5c5a61a..a99bfcc 100644
--- a/testdevapidocs/allclasses-frame.html
+++ b/testdevapidocs/allclasses-frame.html
@@ -1445,6 +1445,7 @@
 <li><a href="org/apache/hadoop/hbase/master/TestMasterMetrics.MyMaster.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">TestMasterMetrics.MyMaster</a></li>
 <li><a href="org/apache/hadoop/hbase/master/TestMasterMetricsWrapper.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">TestMasterMetricsWrapper</a></li>
 <li><a href="org/apache/hadoop/hbase/master/TestMasterNoCluster.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">TestMasterNoCluster</a></li>
+<li><a href="org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">TestMasterNotCarryTable</a></li>
 <li><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor" target="classFrame">TestMasterObserver</a></li>
 <li><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor" target="classFrame">TestMasterObserver.CPMasterObserver</a></li>
 <li><a href="org/apache/hadoop/hbase/master/procedure/TestMasterObserverPostCalls.html" title="class in org.apache.hadoop.hbase.master.procedure" target="classFrame">TestMasterObserverPostCalls</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/testdevapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-noframe.html b/testdevapidocs/allclasses-noframe.html
index 553777a..369a5cd 100644
--- a/testdevapidocs/allclasses-noframe.html
+++ b/testdevapidocs/allclasses-noframe.html
@@ -1445,6 +1445,7 @@
 <li><a href="org/apache/hadoop/hbase/master/TestMasterMetrics.MyMaster.html" title="class in org.apache.hadoop.hbase.master">TestMasterMetrics.MyMaster</a></li>
 <li><a href="org/apache/hadoop/hbase/master/TestMasterMetricsWrapper.html" title="class in org.apache.hadoop.hbase.master">TestMasterMetricsWrapper</a></li>
 <li><a href="org/apache/hadoop/hbase/master/TestMasterNoCluster.html" title="class in org.apache.hadoop.hbase.master">TestMasterNoCluster</a></li>
+<li><a href="org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html" title="class in org.apache.hadoop.hbase.master">TestMasterNotCarryTable</a></li>
 <li><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver</a></li>
 <li><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver.CPMasterObserver</a></li>
 <li><a href="org/apache/hadoop/hbase/master/procedure/TestMasterObserverPostCalls.html" title="class in org.apache.hadoop.hbase.master.procedure">TestMasterObserverPostCalls</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index b692294..17b8b43 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -5387,6 +5387,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterNoCluster.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterNoCluster.html" title="class in org.apache.hadoop.hbase.master">TestMasterNoCluster</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html" title="class in org.apache.hadoop.hbase.master">TestMasterNotCarryTable</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.html" title="class in org.apache.hadoop.hbase.master">TestMasterOperationsForRegionReplicas</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterQosFunction.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterQosFunction.html" title="class in org.apache.hadoop.hbase.master">TestMasterQosFunction</a></dt>
@@ -24345,6 +24347,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterNoCluster.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterNoCluster.html" title="class in org.apache.hadoop.hbase.master">TestMasterNoCluster</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html" title="class in org.apache.hadoop.hbase.master">TestMasterNotCarryTable</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.html" title="class in org.apache.hadoop.hbase.master">TestMasterOperationsForRegionReplicas</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterRepairMode.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterRepairMode.html" title="class in org.apache.hadoop.hbase.master">TestMasterRepairMode</a></dt>
@@ -25592,6 +25596,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterMetrics.html#master">master</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterMetrics.html" title="class in org.apache.hadoop.hbase.master">TestMasterMetrics</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html#master">master</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html" title="class in org.apache.hadoop.hbase.master">TestMasterNotCarryTable</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterStatusServlet.html#master">master</a></span> - Variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterStatusServlet.html" title="class in org.apache.hadoop.hbase.master">TestMasterStatusServlet</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestSplitLogManager.html#master">master</a></span> - Variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestSplitLogManager.html" title="class in org.apache.hadoop.hbase.master">TestSplitLogManager</a></dt>
@@ -37885,6 +37891,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterMetricsWrapper.html#setup--">setup()</a></span> - Static method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterMetricsWrapper.html" title="class in org.apache.hadoop.hbase.master">TestMasterMetricsWrapper</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html#setUp--">setUp()</a></span> - Static method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html" title="class in org.apache.hadoop.hbase.master">TestMasterNotCarryTable</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterQosFunction.html#setUp--">setUp()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterQosFunction.html" title="class in org.apache.hadoop.hbase.master">TestMasterQosFunction</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterRepairMode.html#setUp--">setUp()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterRepairMode.html" title="class in org.apache.hadoop.hbase.master">TestMasterRepairMode</a></dt>
@@ -43373,6 +43381,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterNoCluster.html#tearDown--">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterNoCluster.html" title="class in org.apache.hadoop.hbase.master">TestMasterNoCluster</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html#tearDown--">tearDown()</a></span> - Static method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html" title="class in org.apache.hadoop.hbase.master">TestMasterNotCarryTable</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterRepairMode.html#tearDown--">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterRepairMode.html" title="class in org.apache.hadoop.hbase.master">TestMasterRepairMode</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestRestartCluster.html#tearDown--">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestRestartCluster.html" title="class in org.apache.hadoop.hbase.master">TestRestartCluster</a></dt>
@@ -55466,7 +55476,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterBalanceThrottling.html#TestMasterBalanceThrottling--">TestMasterBalanceThrottling()</a></span> - Constructor for class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterBalanceThrottling.html" title="class in org.apache.hadoop.hbase.master">TestMasterBalanceThrottling</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMaster.html#testMasterBlockCache--">testMasterBlockCache()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMaster.html" title="class in org.apache.hadoop.hbase.master">TestMaster</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html#testMasterBlockCache--">testMasterBlockCache()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html" title="class in org.apache.hadoop.hbase.master">TestMasterNotCarryTable</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestClassLoading.TestMasterCoprocessor.html#TestMasterCoprocessor--">TestMasterCoprocessor()</a></span> - Constructor for class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestClassLoading.TestMasterCoprocessor.html" title="class in org.apache.hadoop.hbase.coprocessor">TestClassLoading.TestMasterCoprocessor</a></dt>
 <dd>&nbsp;</dd>
@@ -55572,6 +55582,8 @@
 <dd>
 <div class="block">Take region lock, they try table exclusive lock, later one should time out.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html#testMasterMemStoreLAB--">testMasterMemStoreLAB()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html" title="class in org.apache.hadoop.hbase.master">TestMasterNotCarryTable</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/TestMasterMetrics.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestMasterMetrics</span></a> - Class in <a href="org/apache/hadoop/hbase/master/package-summary.html">org.apache.hadoop.hbase.master</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterMetrics.html#TestMasterMetrics--">TestMasterMetrics()</a></span> - Constructor for class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterMetrics.html" title="class in org.apache.hadoop.hbase.master">TestMasterMetrics</a></dt>
@@ -55592,6 +55604,12 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterNoCluster.html#TestMasterNoCluster--">TestMasterNoCluster()</a></span> - Constructor for class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterNoCluster.html" title="class in org.apache.hadoop.hbase.master">TestMasterNoCluster</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestMasterNotCarryTable</span></a> - Class in <a href="org/apache/hadoop/hbase/master/package-summary.html">org.apache.hadoop.hbase.master</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html#TestMasterNotCarryTable--">TestMasterNotCarryTable()</a></span> - Constructor for class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html" title="class in org.apache.hadoop.hbase.master">TestMasterNotCarryTable</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html#testMasterNotCarryTable--">testMasterNotCarryTable()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html" title="class in org.apache.hadoop.hbase.master">TestMasterNotCarryTable</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestCoprocessorMetrics.html#testMasterObserver--">testMasterObserver()</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestCoprocessorMetrics.html" title="class in org.apache.hadoop.hbase.coprocessor">TestCoprocessorMetrics</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">TestMasterObserver</span></a> - Class in <a href="org/apache/hadoop/hbase/coprocessor/package-summary.html">org.apache.hadoop.hbase.coprocessor</a></dt>
@@ -68651,6 +68669,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterFileSystemWithWALDir.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterFileSystemWithWALDir.html" title="class in org.apache.hadoop.hbase.master">TestMasterFileSystemWithWALDir</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html" title="class in org.apache.hadoop.hbase.master">TestMasterNotCarryTable</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMergeTableRegionsWhileRSCrash.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMergeTableRegionsWhileRSCrash.html" title="class in org.apache.hadoop.hbase.master">TestMergeTableRegionsWhileRSCrash</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.html" title="class in org.apache.hadoop.hbase.master">TestMetaAssignmentWithStopMaster</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/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/0f0847e0/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 c879b39..fe6645a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
@@ -3413,66 +3413,70 @@
 </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">TestGetLastFlushedSequenceId.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestGetLastFlushedSequenceId.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMasterNotCarryTable.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterNotCarryTable.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">TestCatalogJanitor.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestCatalogJanitor.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestGetLastFlushedSequenceId.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestGetLastFlushedSequenceId.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">TestSplitRegionWhileRSCrash.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestSplitRegionWhileRSCrash.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestCatalogJanitor.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestCatalogJanitor.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">TestHMasterCommandLine.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestHMasterCommandLine.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestSplitRegionWhileRSCrash.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestSplitRegionWhileRSCrash.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">TestMasterAbortAndRSGotKilled.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterAbortAndRSGotKilled.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestHMasterCommandLine.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestHMasterCommandLine.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">TestMasterRepairMode.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterRepairMode.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMasterAbortAndRSGotKilled.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterAbortAndRSGotKilled.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">TestDLSAsyncFSWAL.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestDLSAsyncFSWAL.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMasterRepairMode.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterRepairMode.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">TestServerCrashProcedureCarryingMetaStuck.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestServerCrashProcedureCarryingMetaStuck.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestDLSAsyncFSWAL.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestDLSAsyncFSWAL.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">TestMaster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMaster.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestServerCrashProcedureCarryingMetaStuck.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestServerCrashProcedureCarryingMetaStuck.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">TestMasterOperationsForRegionReplicas.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMaster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMaster.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">TestGetReplicationLoad.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestGetReplicationLoad.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMasterOperationsForRegionReplicas.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.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">TestMasterBalanceThrottling.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterBalanceThrottling.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestGetReplicationLoad.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestGetReplicationLoad.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">TestMasterFileSystemWithWALDir.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterFileSystemWithWALDir.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMasterBalanceThrottling.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterBalanceThrottling.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">TestMetaAssignmentWithStopMaster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMasterFileSystemWithWALDir.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterFileSystemWithWALDir.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">TestMirroringTableStateManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMirroringTableStateManager.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMetaAssignmentWithStopMaster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.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">TestMirroringTableStateManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMirroringTableStateManager.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">TestMasterMetricsWrapper.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterMetricsWrapper.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 </tbody>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/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 c59a929..32530da 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
@@ -2168,22 +2168,26 @@
 <td class="colLast"><span class="typeNameLabel">TestMergeTableRegionsWhileRSCrash.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMergeTableRegionsWhileRSCrash.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TestMasterNotCarryTable.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html#UTIL">UTIL</a></span></code>&nbsp;</td>
+</tr>
+<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">TestSplitRegionWhileRSCrash.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestSplitRegionWhileRSCrash.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">TestMasterAbortAndRSGotKilled.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterAbortAndRSGotKilled.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">TestServerCrashProcedureCarryingMetaStuck.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestServerCrashProcedureCarryingMetaStuck.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">TestMasterFileSystemWithWALDir.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterFileSystemWithWALDir.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">TestMetaAssignmentWithStopMaster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/testdevapidocs/org/apache/hadoop/hbase/master/TestMaster.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/TestMaster.html b/testdevapidocs/org/apache/hadoop/hbase/master/TestMaster.html
index 0108817..fd243cc 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/TestMaster.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/TestMaster.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":9,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10};
+var methods = {"i0":9,"i1":9,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.69">TestMaster</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.68">TestMaster</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>
@@ -207,21 +207,17 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr id="i4" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMaster.html#testMasterBlockCache--">testMasterBlockCache</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i5" class="rowColor">
-<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMaster.html#testMasterOpsWhileSplitting--">testMasterOpsWhileSplitting</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMaster.html#testMoveRegionWhenNotInitialized--">testMoveRegionWhenNotInitialized</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMaster.html#testMoveThrowsPleaseHoldException--">testMoveThrowsPleaseHoldException</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMaster.html#testMoveThrowsUnknownRegionException--">testMoveThrowsUnknownRegionException</a></span>()</code>&nbsp;</td>
 </tr>
@@ -253,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>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/TestMaster.html#line.72">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/TestMaster.html#line.71">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="TEST_UTIL">
@@ -262,7 +258,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>TEST_UTIL</h4>
-<pre>private static 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/TestMaster.html#line.75">TEST_UTIL</a></pre>
+<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/TestMaster.html#line.74">TEST_UTIL</a></pre>
 </li>
 </ul>
 <a name="LOG">
@@ -271,7 +267,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/TestMaster.html#line.76">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.75">LOG</a></pre>
 </li>
 </ul>
 <a name="TABLENAME">
@@ -280,7 +276,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>TABLENAME</h4>
-<pre>private static final&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.77">TABLENAME</a></pre>
+<pre>private static final&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.76">TABLENAME</a></pre>
 </li>
 </ul>
 <a name="FAMILYNAME">
@@ -289,7 +285,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>FAMILYNAME</h4>
-<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.78">FAMILYNAME</a></pre>
+<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.77">FAMILYNAME</a></pre>
 </li>
 </ul>
 <a name="admin">
@@ -298,7 +294,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>admin</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.client.Admin <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.79">admin</a></pre>
+<pre>private static&nbsp;org.apache.hadoop.hbase.client.Admin <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.78">admin</a></pre>
 </li>
 </ul>
 <a name="name">
@@ -307,7 +303,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/TestMaster.html#line.82">name</a></pre>
+<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.81">name</a></pre>
 </li>
 </ul>
 </li>
@@ -324,7 +320,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestMaster</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.69">TestMaster</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.68">TestMaster</a>()</pre>
 </li>
 </ul>
 </li>
@@ -341,7 +337,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>beforeAllTests</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.85">beforeAllTests</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.84">beforeAllTests</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>
@@ -355,7 +351,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>afterAllTests</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.94">afterAllTests</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.93">afterAllTests</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>
@@ -369,7 +365,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testMasterOpsWhileSplitting</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.100">testMasterOpsWhileSplitting</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.99">testMasterOpsWhileSplitting</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>
@@ -383,7 +379,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testMoveRegionWhenNotInitialized</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.142">testMoveRegionWhenNotInitialized</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.141">testMoveRegionWhenNotInitialized</a>()</pre>
 </li>
 </ul>
 <a name="testMoveThrowsUnknownRegionException--">
@@ -392,7 +388,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testMoveThrowsUnknownRegionException</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.158">testMoveThrowsUnknownRegionException</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.157">testMoveThrowsUnknownRegionException</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>
@@ -406,7 +402,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testMoveThrowsPleaseHoldException</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.180">testMoveThrowsPleaseHoldException</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.179">testMoveThrowsPleaseHoldException</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>
@@ -420,7 +416,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testFlushedSequenceIdPersistLoad</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.203">testFlushedSequenceIdPersistLoad</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.202">testFlushedSequenceIdPersistLoad</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>
@@ -431,10 +427,10 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <a name="testBlockingHbkc1WithLockFile--">
 <!--   -->
 </a>
-<ul class="blockList">
+<ul class="blockListLast">
 <li class="blockList">
 <h4>testBlockingHbkc1WithLockFile</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.231">testBlockingHbkc1WithLockFile</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.230">testBlockingHbkc1WithLockFile</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>
@@ -442,15 +438,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
-<a name="testMasterBlockCache--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>testMasterBlockCache</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.268">testMasterBlockCache</a>()</pre>
-</li>
-</ul>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/testdevapidocs/org/apache/hadoop/hbase/master/TestMasterNoCluster.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/TestMasterNoCluster.html b/testdevapidocs/org/apache/hadoop/hbase/master/TestMasterNoCluster.html
index a6a6552..d6a63a1 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/TestMasterNoCluster.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/TestMasterNoCluster.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterMetricsWrapper.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/master/TestMasterNoCluster.html" target="_top">Frames</a></li>
@@ -462,7 +462,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/TestMasterMetricsWrapper.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterNotCarryTable.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/master/TestMasterNoCluster.html" target="_top">Frames</a></li>


[08/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
index bf81ebb..a170ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
@@ -606,3246 +606,3245 @@
 <span class="sourceLineNo">598</span><a name="line.598"></a>
 <span class="sourceLineNo">599</span>      regionServerAccounting = new RegionServerAccounting(conf);<a name="line.599"></a>
 <span class="sourceLineNo">600</span>      boolean isMasterNotCarryTable =<a name="line.600"></a>
-<span class="sourceLineNo">601</span>          this instanceof HMaster &amp;&amp; !LoadBalancer.isTablesOnMaster(conf) &amp;&amp; !LoadBalancer<a name="line.601"></a>
-<span class="sourceLineNo">602</span>              .isSystemTablesOnlyOnMaster(conf);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      cacheConfig = new CacheConfig(conf, !isMasterNotCarryTable);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      mobCacheConfig = new MobCacheConfig(conf, !isMasterNotCarryTable);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      uncaughtExceptionHandler = new UncaughtExceptionHandler() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>        @Override<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        public void uncaughtException(Thread t, Throwable e) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>          abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        }<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      };<a name="line.610"></a>
-<span class="sourceLineNo">611</span><a name="line.611"></a>
-<span class="sourceLineNo">612</span>      initializeFileSystem();<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      spanReceiverHost = SpanReceiverHost.getInstance(getConfiguration());<a name="line.613"></a>
-<span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>      this.configurationManager = new ConfigurationManager();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      setupWindows(getConfiguration(), getConfigurationManager());<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>      // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>        // Open connection to zookeeper and set primary watcher<a name="line.620"></a>
-<span class="sourceLineNo">621</span>        zooKeeper = new ZKWatcher(conf, getProcessName() + ":" +<a name="line.621"></a>
-<span class="sourceLineNo">622</span>          rpcServices.isa.getPort(), this, canCreateBaseZNode());<a name="line.622"></a>
-<span class="sourceLineNo">623</span>        // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.623"></a>
-<span class="sourceLineNo">624</span>        if (!this.masterless) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>          this.csm = new ZkCoordinatedStateManager(this);<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span>          masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.627"></a>
-<span class="sourceLineNo">628</span>          masterAddressTracker.start();<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>          clusterStatusTracker = new ClusterStatusTracker(zooKeeper, this);<a name="line.630"></a>
-<span class="sourceLineNo">631</span>          clusterStatusTracker.start();<a name="line.631"></a>
-<span class="sourceLineNo">632</span>        } else {<a name="line.632"></a>
-<span class="sourceLineNo">633</span>          masterAddressTracker = null;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>          clusterStatusTracker = null;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>        }<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      } else {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>        zooKeeper = null;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        masterAddressTracker = null;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        clusterStatusTracker = null;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      }<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      this.rpcServices.start(zooKeeper);<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      // This violates 'no starting stuff in Constructor' but Master depends on the below chore<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      // and executor being created and takes a different startup route. Lots of overlap between HRS<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      // and M (An M IS A HRS now). Need to refactor so less duplication between M and its super<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      // Master expects Constructor to put up web servers. Ugh.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      // class HRS. TODO.<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      this.choreService = new ChoreService(getName(), true);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      this.executorService = new ExecutorService(getName());<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      putUpWebUI();<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    } catch (Throwable t) {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      // cause of failed startup is lost.<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      LOG.error("Failed construction RegionServer", t);<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      throw t;<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>  }<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span>  // HMaster should override this method to load the specific config for master<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    String hostname = conf.get(RS_HOSTNAME_KEY);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    if (conf.getBoolean(RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.662"></a>
-<span class="sourceLineNo">663</span>        String msg = RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and " + RS_HOSTNAME_KEY +<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          " are mutually exclusive. Do not set " + RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY +<a name="line.664"></a>
-<span class="sourceLineNo">665</span>          " to true while " + RS_HOSTNAME_KEY + " is used";<a name="line.665"></a>
-<span class="sourceLineNo">666</span>        throw new IOException(msg);<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      } else {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        return rpcServices.isa.getHostName();<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      }<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    } else {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>      return hostname;<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    }<a name="line.672"></a>
-<span class="sourceLineNo">673</span>  }<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span>  /**<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   * If running on Windows, do windows-specific setup.<a name="line.676"></a>
-<span class="sourceLineNo">677</span>   */<a name="line.677"></a>
-<span class="sourceLineNo">678</span>  private static void setupWindows(final Configuration conf, ConfigurationManager cm) {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    if (!SystemUtils.IS_OS_WINDOWS) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      Signal.handle(new Signal("HUP"), new SignalHandler() {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        @Override<a name="line.681"></a>
-<span class="sourceLineNo">682</span>        public void handle(Signal signal) {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          conf.reloadConfiguration();<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          cm.notifyAllObservers(conf);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>        }<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><a name="line.689"></a>
-<span class="sourceLineNo">690</span>  private static NettyEventLoopGroupConfig setupNetty(Configuration conf) {<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    // Initialize netty event loop group at start as we may use it for rpc server, rpc client &amp; WAL.<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    NettyEventLoopGroupConfig nelgc =<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      new NettyEventLoopGroupConfig(conf, "RS-EventLoopGroup");<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    NettyRpcClientConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    NettyAsyncFSWALConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    return nelgc;<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 void initializeFileSystem() throws IOException {<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    // Get fs instance used by this RS.  Do we use checksum verification in the hbase? If hbase<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    // checksum verification enabled, then automatically switch off hdfs checksum verification.<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    boolean useHBaseChecksum = conf.getBoolean(HConstants.HBASE_CHECKSUM_VERIFICATION, true);<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    FSUtils.setFsDefault(this.conf, FSUtils.getWALRootDir(this.conf));<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    this.walFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    this.walRootDir = FSUtils.getWALRootDir(this.conf);<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    // Set 'fs.defaultFS' to match the filesystem on hbase.rootdir else<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    // underlying hadoop hdfs accessors will be going against wrong filesystem<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    // (unless all is set to defaults).<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    FSUtils.setFsDefault(this.conf, FSUtils.getRootDir(this.conf));<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    this.fs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    this.rootDir = FSUtils.getRootDir(this.conf);<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    this.tableDescriptors = getFsTableDescriptors();<a name="line.712"></a>
-<span class="sourceLineNo">713</span>  }<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span>  protected TableDescriptors getFsTableDescriptors() throws IOException {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    return new FSTableDescriptors(this.conf,<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      this.fs, this.rootDir, !canUpdateTableDescriptor(), false, getMetaTableObserver());<a name="line.717"></a>
-<span class="sourceLineNo">718</span>  }<a name="line.718"></a>
-<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>  protected Function&lt;TableDescriptorBuilder, TableDescriptorBuilder&gt; getMetaTableObserver() {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    return null;<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  }<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    user.login("hbase.regionserver.keytab.file",<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      "hbase.regionserver.kerberos.principal", host);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>  }<a name="line.727"></a>
+<span class="sourceLineNo">601</span>          this instanceof HMaster &amp;&amp; !LoadBalancer.isTablesOnMaster(conf);<a name="line.601"></a>
+<span class="sourceLineNo">602</span>      cacheConfig = new CacheConfig(conf, !isMasterNotCarryTable);<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      mobCacheConfig = new MobCacheConfig(conf, !isMasterNotCarryTable);<a name="line.603"></a>
+<span class="sourceLineNo">604</span>      uncaughtExceptionHandler = new UncaughtExceptionHandler() {<a name="line.604"></a>
+<span class="sourceLineNo">605</span>        @Override<a name="line.605"></a>
+<span class="sourceLineNo">606</span>        public void uncaughtException(Thread t, Throwable e) {<a name="line.606"></a>
+<span class="sourceLineNo">607</span>          abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.607"></a>
+<span class="sourceLineNo">608</span>        }<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      };<a name="line.609"></a>
+<span class="sourceLineNo">610</span><a name="line.610"></a>
+<span class="sourceLineNo">611</span>      initializeFileSystem();<a name="line.611"></a>
+<span class="sourceLineNo">612</span>      spanReceiverHost = SpanReceiverHost.getInstance(getConfiguration());<a name="line.612"></a>
+<span class="sourceLineNo">613</span><a name="line.613"></a>
+<span class="sourceLineNo">614</span>      this.configurationManager = new ConfigurationManager();<a name="line.614"></a>
+<span class="sourceLineNo">615</span>      setupWindows(getConfiguration(), getConfigurationManager());<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span>      // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.617"></a>
+<span class="sourceLineNo">618</span>      if (!conf.getBoolean("hbase.testing.nocluster", false)) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>        // Open connection to zookeeper and set primary watcher<a name="line.619"></a>
+<span class="sourceLineNo">620</span>        zooKeeper = new ZKWatcher(conf, getProcessName() + ":" +<a name="line.620"></a>
+<span class="sourceLineNo">621</span>          rpcServices.isa.getPort(), this, canCreateBaseZNode());<a name="line.621"></a>
+<span class="sourceLineNo">622</span>        // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.622"></a>
+<span class="sourceLineNo">623</span>        if (!this.masterless) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>          this.csm = new ZkCoordinatedStateManager(this);<a name="line.624"></a>
+<span class="sourceLineNo">625</span><a name="line.625"></a>
+<span class="sourceLineNo">626</span>          masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.626"></a>
+<span class="sourceLineNo">627</span>          masterAddressTracker.start();<a name="line.627"></a>
+<span class="sourceLineNo">628</span><a name="line.628"></a>
+<span class="sourceLineNo">629</span>          clusterStatusTracker = new ClusterStatusTracker(zooKeeper, this);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>          clusterStatusTracker.start();<a name="line.630"></a>
+<span class="sourceLineNo">631</span>        } else {<a name="line.631"></a>
+<span class="sourceLineNo">632</span>          masterAddressTracker = null;<a name="line.632"></a>
+<span class="sourceLineNo">633</span>          clusterStatusTracker = null;<a name="line.633"></a>
+<span class="sourceLineNo">634</span>        }<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      } else {<a name="line.635"></a>
+<span class="sourceLineNo">636</span>        zooKeeper = null;<a name="line.636"></a>
+<span class="sourceLineNo">637</span>        masterAddressTracker = null;<a name="line.637"></a>
+<span class="sourceLineNo">638</span>        clusterStatusTracker = null;<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      }<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      this.rpcServices.start(zooKeeper);<a name="line.640"></a>
+<span class="sourceLineNo">641</span>      // This violates 'no starting stuff in Constructor' but Master depends on the below chore<a name="line.641"></a>
+<span class="sourceLineNo">642</span>      // and executor being created and takes a different startup route. Lots of overlap between HRS<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      // and M (An M IS A HRS now). Need to refactor so less duplication between M and its super<a name="line.643"></a>
+<span class="sourceLineNo">644</span>      // Master expects Constructor to put up web servers. Ugh.<a name="line.644"></a>
+<span class="sourceLineNo">645</span>      // class HRS. TODO.<a name="line.645"></a>
+<span class="sourceLineNo">646</span>      this.choreService = new ChoreService(getName(), true);<a name="line.646"></a>
+<span class="sourceLineNo">647</span>      this.executorService = new ExecutorService(getName());<a name="line.647"></a>
+<span class="sourceLineNo">648</span>      putUpWebUI();<a name="line.648"></a>
+<span class="sourceLineNo">649</span>    } catch (Throwable t) {<a name="line.649"></a>
+<span class="sourceLineNo">650</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      // cause of failed startup is lost.<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      LOG.error("Failed construction RegionServer", t);<a name="line.652"></a>
+<span class="sourceLineNo">653</span>      throw t;<a name="line.653"></a>
+<span class="sourceLineNo">654</span>    }<a name="line.654"></a>
+<span class="sourceLineNo">655</span>  }<a name="line.655"></a>
+<span class="sourceLineNo">656</span><a name="line.656"></a>
+<span class="sourceLineNo">657</span>  // HMaster should override this method to load the specific config for master<a name="line.657"></a>
+<span class="sourceLineNo">658</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.658"></a>
+<span class="sourceLineNo">659</span>    String hostname = conf.get(RS_HOSTNAME_KEY);<a name="line.659"></a>
+<span class="sourceLineNo">660</span>    if (conf.getBoolean(RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>        String msg = RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and " + RS_HOSTNAME_KEY +<a name="line.662"></a>
+<span class="sourceLineNo">663</span>          " are mutually exclusive. Do not set " + RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY +<a name="line.663"></a>
+<span class="sourceLineNo">664</span>          " to true while " + RS_HOSTNAME_KEY + " is used";<a name="line.664"></a>
+<span class="sourceLineNo">665</span>        throw new IOException(msg);<a name="line.665"></a>
+<span class="sourceLineNo">666</span>      } else {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>        return rpcServices.isa.getHostName();<a name="line.667"></a>
+<span class="sourceLineNo">668</span>      }<a name="line.668"></a>
+<span class="sourceLineNo">669</span>    } else {<a name="line.669"></a>
+<span class="sourceLineNo">670</span>      return hostname;<a name="line.670"></a>
+<span class="sourceLineNo">671</span>    }<a name="line.671"></a>
+<span class="sourceLineNo">672</span>  }<a name="line.672"></a>
+<span class="sourceLineNo">673</span><a name="line.673"></a>
+<span class="sourceLineNo">674</span>  /**<a name="line.674"></a>
+<span class="sourceLineNo">675</span>   * If running on Windows, do windows-specific setup.<a name="line.675"></a>
+<span class="sourceLineNo">676</span>   */<a name="line.676"></a>
+<span class="sourceLineNo">677</span>  private static void setupWindows(final Configuration conf, ConfigurationManager cm) {<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    if (!SystemUtils.IS_OS_WINDOWS) {<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      Signal.handle(new Signal("HUP"), new SignalHandler() {<a name="line.679"></a>
+<span class="sourceLineNo">680</span>        @Override<a name="line.680"></a>
+<span class="sourceLineNo">681</span>        public void handle(Signal signal) {<a name="line.681"></a>
+<span class="sourceLineNo">682</span>          conf.reloadConfiguration();<a name="line.682"></a>
+<span class="sourceLineNo">683</span>          cm.notifyAllObservers(conf);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>        }<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      });<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 static NettyEventLoopGroupConfig setupNetty(Configuration conf) {<a name="line.689"></a>
+<span class="sourceLineNo">690</span>    // Initialize netty event loop group at start as we may use it for rpc server, rpc client &amp; WAL.<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    NettyEventLoopGroupConfig nelgc =<a name="line.691"></a>
+<span class="sourceLineNo">692</span>      new NettyEventLoopGroupConfig(conf, "RS-EventLoopGroup");<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    NettyRpcClientConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    NettyAsyncFSWALConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    return nelgc;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>  }<a name="line.696"></a>
+<span class="sourceLineNo">697</span><a name="line.697"></a>
+<span class="sourceLineNo">698</span>  private void initializeFileSystem() throws IOException {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>    // Get fs instance used by this RS.  Do we use checksum verification in the hbase? If hbase<a name="line.699"></a>
+<span class="sourceLineNo">700</span>    // checksum verification enabled, then automatically switch off hdfs checksum verification.<a name="line.700"></a>
+<span class="sourceLineNo">701</span>    boolean useHBaseChecksum = conf.getBoolean(HConstants.HBASE_CHECKSUM_VERIFICATION, true);<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    FSUtils.setFsDefault(this.conf, FSUtils.getWALRootDir(this.conf));<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    this.walFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>    this.walRootDir = FSUtils.getWALRootDir(this.conf);<a name="line.704"></a>
+<span class="sourceLineNo">705</span>    // Set 'fs.defaultFS' to match the filesystem on hbase.rootdir else<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    // underlying hadoop hdfs accessors will be going against wrong filesystem<a name="line.706"></a>
+<span class="sourceLineNo">707</span>    // (unless all is set to defaults).<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    FSUtils.setFsDefault(this.conf, FSUtils.getRootDir(this.conf));<a name="line.708"></a>
+<span class="sourceLineNo">709</span>    this.fs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.709"></a>
+<span class="sourceLineNo">710</span>    this.rootDir = FSUtils.getRootDir(this.conf);<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    this.tableDescriptors = getFsTableDescriptors();<a name="line.711"></a>
+<span class="sourceLineNo">712</span>  }<a name="line.712"></a>
+<span class="sourceLineNo">713</span><a name="line.713"></a>
+<span class="sourceLineNo">714</span>  protected TableDescriptors getFsTableDescriptors() throws IOException {<a name="line.714"></a>
+<span class="sourceLineNo">715</span>    return new FSTableDescriptors(this.conf,<a name="line.715"></a>
+<span class="sourceLineNo">716</span>      this.fs, this.rootDir, !canUpdateTableDescriptor(), false, getMetaTableObserver());<a name="line.716"></a>
+<span class="sourceLineNo">717</span>  }<a name="line.717"></a>
+<span class="sourceLineNo">718</span><a name="line.718"></a>
+<span class="sourceLineNo">719</span>  protected Function&lt;TableDescriptorBuilder, TableDescriptorBuilder&gt; getMetaTableObserver() {<a name="line.719"></a>
+<span class="sourceLineNo">720</span>    return null;<a name="line.720"></a>
+<span class="sourceLineNo">721</span>  }<a name="line.721"></a>
+<span class="sourceLineNo">722</span><a name="line.722"></a>
+<span class="sourceLineNo">723</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.723"></a>
+<span class="sourceLineNo">724</span>    user.login("hbase.regionserver.keytab.file",<a name="line.724"></a>
+<span class="sourceLineNo">725</span>      "hbase.regionserver.kerberos.principal", host);<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><a name="line.729"></a>
-<span class="sourceLineNo">730</span>  /**<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * Wait for an active Master.<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   * See override in Master superclass for how it is used.<a name="line.732"></a>
-<span class="sourceLineNo">733</span>   */<a name="line.733"></a>
-<span class="sourceLineNo">734</span>  protected void waitForMasterActive() {}<a name="line.734"></a>
-<span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>  protected String getProcessName() {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    return REGIONSERVER;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  protected boolean canCreateBaseZNode() {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    return this.masterless;<a name="line.741"></a>
-<span class="sourceLineNo">742</span>  }<a name="line.742"></a>
-<span class="sourceLineNo">743</span><a name="line.743"></a>
-<span class="sourceLineNo">744</span>  protected boolean canUpdateTableDescriptor() {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    return false;<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
-<span class="sourceLineNo">747</span><a name="line.747"></a>
-<span class="sourceLineNo">748</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    return new RSRpcServices(this);<a name="line.749"></a>
-<span class="sourceLineNo">750</span>  }<a name="line.750"></a>
-<span class="sourceLineNo">751</span><a name="line.751"></a>
-<span class="sourceLineNo">752</span>  protected void configureInfoServer() {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    infoServer.addServlet("rs-status", "/rs-status", RSStatusServlet.class);<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    infoServer.setAttribute(REGIONSERVER, this);<a name="line.754"></a>
-<span class="sourceLineNo">755</span>  }<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    return RSDumpServlet.class;<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>  @Override<a name="line.761"></a>
-<span class="sourceLineNo">762</span>  public boolean registerService(com.google.protobuf.Service instance) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    /*<a name="line.763"></a>
-<span class="sourceLineNo">764</span>     * No stacking of instances is allowed for a single executorService name<a name="line.764"></a>
-<span class="sourceLineNo">765</span>     */<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    com.google.protobuf.Descriptors.ServiceDescriptor serviceDesc =<a name="line.766"></a>
-<span class="sourceLineNo">767</span>        instance.getDescriptorForType();<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      LOG.error("Coprocessor executorService " + serviceName<a name="line.770"></a>
-<span class="sourceLineNo">771</span>          + " already registered, rejecting request from " + instance);<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      return false;<a name="line.772"></a>
-<span class="sourceLineNo">773</span>    }<a name="line.773"></a>
-<span class="sourceLineNo">774</span><a name="line.774"></a>
-<span class="sourceLineNo">775</span>    coprocessorServiceHandlers.put(serviceName, instance);<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    if (LOG.isDebugEnabled()) {<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      LOG.debug("Registered regionserver coprocessor executorService: executorService=" + serviceName);<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    }<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    return true;<a name="line.779"></a>
-<span class="sourceLineNo">780</span>  }<a name="line.780"></a>
-<span class="sourceLineNo">781</span><a name="line.781"></a>
-<span class="sourceLineNo">782</span>  /**<a name="line.782"></a>
-<span class="sourceLineNo">783</span>   * Create a 'smarter' Connection, one that is capable of by-passing RPC if the request is to<a name="line.783"></a>
-<span class="sourceLineNo">784</span>   * the local server; i.e. a short-circuit Connection. Safe to use going to local or remote<a name="line.784"></a>
-<span class="sourceLineNo">785</span>   * server. Create this instance in a method can be intercepted and mocked in tests.<a name="line.785"></a>
-<span class="sourceLineNo">786</span>   * @throws IOException<a name="line.786"></a>
-<span class="sourceLineNo">787</span>   */<a name="line.787"></a>
-<span class="sourceLineNo">788</span>  @VisibleForTesting<a name="line.788"></a>
-<span class="sourceLineNo">789</span>  protected ClusterConnection createClusterConnection() throws IOException {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    Configuration conf = this.conf;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    if (conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM) != null) {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      // Use server ZK cluster for server-issued connections, so we clone<a name="line.792"></a>
-<span class="sourceLineNo">793</span>      // the conf and unset the client ZK related properties<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      conf = new Configuration(this.conf);<a name="line.794"></a>
-<span class="sourceLineNo">795</span>      conf.unset(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>    }<a name="line.796"></a>
-<span class="sourceLineNo">797</span>    // Create a cluster connection that when appropriate, can short-circuit and go directly to the<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    // local server if the request is to the local server bypassing RPC. Can be used for both local<a name="line.798"></a>
-<span class="sourceLineNo">799</span>    // and remote invocations.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    return ConnectionUtils.createShortCircuitConnection(conf, null, userProvider.getCurrent(),<a name="line.800"></a>
-<span class="sourceLineNo">801</span>      serverName, rpcServices, rpcServices);<a name="line.801"></a>
-<span class="sourceLineNo">802</span>  }<a name="line.802"></a>
-<span class="sourceLineNo">803</span><a name="line.803"></a>
-<span class="sourceLineNo">804</span>  /**<a name="line.804"></a>
-<span class="sourceLineNo">805</span>   * Run test on configured codecs to make sure supporting libs are in place.<a name="line.805"></a>
-<span class="sourceLineNo">806</span>   * @param c<a name="line.806"></a>
-<span class="sourceLineNo">807</span>   * @throws IOException<a name="line.807"></a>
-<span class="sourceLineNo">808</span>   */<a name="line.808"></a>
-<span class="sourceLineNo">809</span>  private static void checkCodecs(final Configuration c) throws IOException {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    // check to see if the codec list is available:<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    String [] codecs = c.getStrings("hbase.regionserver.codecs", (String[])null);<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    if (codecs == null) return;<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    for (String codec : codecs) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>      if (!CompressionTest.testCompression(codec)) {<a name="line.814"></a>
-<span class="sourceLineNo">815</span>        throw new IOException("Compression codec " + codec +<a name="line.815"></a>
-<span class="sourceLineNo">816</span>          " not supported, aborting RS construction");<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      }<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
-<span class="sourceLineNo">819</span>  }<a name="line.819"></a>
-<span class="sourceLineNo">820</span><a name="line.820"></a>
-<span class="sourceLineNo">821</span>  public String getClusterId() {<a name="line.821"></a>
-<span class="sourceLineNo">822</span>    return this.clusterId;<a name="line.822"></a>
-<span class="sourceLineNo">823</span>  }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>  /**<a name="line.825"></a>
-<span class="sourceLineNo">826</span>   * Setup our cluster connection if not already initialized.<a name="line.826"></a>
-<span class="sourceLineNo">827</span>   * @throws IOException<a name="line.827"></a>
-<span class="sourceLineNo">828</span>   */<a name="line.828"></a>
-<span class="sourceLineNo">829</span>  protected synchronized void setupClusterConnection() throws IOException {<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    if (clusterConnection == null) {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>      clusterConnection = createClusterConnection();<a name="line.831"></a>
-<span class="sourceLineNo">832</span>      metaTableLocator = new MetaTableLocator();<a name="line.832"></a>
-<span class="sourceLineNo">833</span>    }<a name="line.833"></a>
-<span class="sourceLineNo">834</span>  }<a name="line.834"></a>
-<span class="sourceLineNo">835</span><a name="line.835"></a>
-<span class="sourceLineNo">836</span>  /**<a name="line.836"></a>
-<span class="sourceLineNo">837</span>   * All initialization needed before we go register with Master.&lt;br&gt;<a name="line.837"></a>
-<span class="sourceLineNo">838</span>   * Do bare minimum. Do bulk of initializations AFTER we've connected to the Master.&lt;br&gt;<a name="line.838"></a>
-<span class="sourceLineNo">839</span>   * In here we just put up the RpcServer, setup Connection, and ZooKeeper.<a name="line.839"></a>
-<span class="sourceLineNo">840</span>   */<a name="line.840"></a>
-<span class="sourceLineNo">841</span>  private void preRegistrationInitialization() {<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    try {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      initializeZooKeeper();<a name="line.843"></a>
-<span class="sourceLineNo">844</span>      setupClusterConnection();<a name="line.844"></a>
-<span class="sourceLineNo">845</span>      // Setup RPC client for master communication<a name="line.845"></a>
-<span class="sourceLineNo">846</span>      this.rpcClient = RpcClientFactory.createClient(conf, clusterId, new InetSocketAddress(<a name="line.846"></a>
-<span class="sourceLineNo">847</span>          this.rpcServices.isa.getAddress(), 0), clusterConnection.getConnectionMetrics());<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    } catch (Throwable t) {<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      // Call stop if error or process will stick around for ever since server<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      // puts up non-daemon threads.<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      this.rpcServices.stop();<a name="line.851"></a>
-<span class="sourceLineNo">852</span>      abort("Initialization of RS failed.  Hence aborting RS.", t);<a name="line.852"></a>
-<span class="sourceLineNo">853</span>    }<a name="line.853"></a>
-<span class="sourceLineNo">854</span>  }<a name="line.854"></a>
-<span class="sourceLineNo">855</span><a name="line.855"></a>
-<span class="sourceLineNo">856</span>  /**<a name="line.856"></a>
-<span class="sourceLineNo">857</span>   * Bring up connection to zk ensemble and then wait until a master for this cluster and then after<a name="line.857"></a>
-<span class="sourceLineNo">858</span>   * that, wait until cluster 'up' flag has been set. This is the order in which master does things.<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * &lt;p&gt;<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * Finally open long-living server short-circuit connection.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   */<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE",<a name="line.862"></a>
-<span class="sourceLineNo">863</span>    justification="cluster Id znode read would give us correct response")<a name="line.863"></a>
-<span class="sourceLineNo">864</span>  private void initializeZooKeeper() throws IOException, InterruptedException {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>    // Nothing to do in here if no Master in the mix.<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    if (this.masterless) {<a name="line.866"></a>
-<span class="sourceLineNo">867</span>      return;<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    }<a name="line.868"></a>
-<span class="sourceLineNo">869</span><a name="line.869"></a>
-<span class="sourceLineNo">870</span>    // Create the master address tracker, register with zk, and start it.  Then<a name="line.870"></a>
-<span class="sourceLineNo">871</span>    // block until a master is available.  No point in starting up if no master<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    // running.<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    blockAndCheckIfStopped(this.masterAddressTracker);<a name="line.873"></a>
-<span class="sourceLineNo">874</span><a name="line.874"></a>
-<span class="sourceLineNo">875</span>    // Wait on cluster being up.  Master will set this flag up in zookeeper<a name="line.875"></a>
-<span class="sourceLineNo">876</span>    // when ready.<a name="line.876"></a>
-<span class="sourceLineNo">877</span>    blockAndCheckIfStopped(this.clusterStatusTracker);<a name="line.877"></a>
-<span class="sourceLineNo">878</span><a name="line.878"></a>
-<span class="sourceLineNo">879</span>    // If we are HMaster then the cluster id should have already been set.<a name="line.879"></a>
-<span class="sourceLineNo">880</span>    if (clusterId == null) {<a name="line.880"></a>
-<span class="sourceLineNo">881</span>      // Retrieve clusterId<a name="line.881"></a>
-<span class="sourceLineNo">882</span>      // Since cluster status is now up<a name="line.882"></a>
-<span class="sourceLineNo">883</span>      // ID should have already been set by HMaster<a name="line.883"></a>
-<span class="sourceLineNo">884</span>      try {<a name="line.884"></a>
-<span class="sourceLineNo">885</span>        clusterId = ZKClusterId.readClusterIdZNode(this.zooKeeper);<a name="line.885"></a>
-<span class="sourceLineNo">886</span>        if (clusterId == null) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>          this.abort("Cluster ID has not been set");<a name="line.887"></a>
-<span class="sourceLineNo">888</span>        }<a name="line.888"></a>
-<span class="sourceLineNo">889</span>        LOG.info("ClusterId : " + clusterId);<a name="line.889"></a>
-<span class="sourceLineNo">890</span>      } catch (KeeperException e) {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>        this.abort("Failed to retrieve Cluster ID", e);<a name="line.891"></a>
-<span class="sourceLineNo">892</span>      }<a name="line.892"></a>
-<span class="sourceLineNo">893</span>    }<a name="line.893"></a>
-<span class="sourceLineNo">894</span><a name="line.894"></a>
-<span class="sourceLineNo">895</span>    waitForMasterActive();<a name="line.895"></a>
-<span class="sourceLineNo">896</span>    if (isStopped() || isAborted()) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      return; // No need for further initialization<a name="line.897"></a>
-<span class="sourceLineNo">898</span>    }<a name="line.898"></a>
-<span class="sourceLineNo">899</span><a name="line.899"></a>
-<span class="sourceLineNo">900</span>    // watch for snapshots and other procedures<a name="line.900"></a>
-<span class="sourceLineNo">901</span>    try {<a name="line.901"></a>
-<span class="sourceLineNo">902</span>      rspmHost = new RegionServerProcedureManagerHost();<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      rspmHost.loadProcedures(conf);<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      rspmHost.initialize(this);<a name="line.904"></a>
-<span class="sourceLineNo">905</span>    } catch (KeeperException e) {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>      this.abort("Failed to reach coordination cluster when creating procedure handler.", e);<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><a name="line.909"></a>
-<span class="sourceLineNo">910</span>  /**<a name="line.910"></a>
-<span class="sourceLineNo">911</span>   * Utilty method to wait indefinitely on a znode availability while checking<a name="line.911"></a>
-<span class="sourceLineNo">912</span>   * if the region server is shut down<a name="line.912"></a>
-<span class="sourceLineNo">913</span>   * @param tracker znode tracker to use<a name="line.913"></a>
-<span class="sourceLineNo">914</span>   * @throws IOException any IO exception, plus if the RS is stopped<a name="line.914"></a>
-<span class="sourceLineNo">915</span>   * @throws InterruptedException<a name="line.915"></a>
-<span class="sourceLineNo">916</span>   */<a name="line.916"></a>
-<span class="sourceLineNo">917</span>  private void blockAndCheckIfStopped(ZKNodeTracker tracker)<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      throws IOException, InterruptedException {<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    while (tracker.blockUntilAvailable(this.msgInterval, false) == null) {<a name="line.919"></a>
-<span class="sourceLineNo">920</span>      if (this.stopped) {<a name="line.920"></a>
-<span class="sourceLineNo">921</span>        throw new IOException("Received the shutdown message while waiting.");<a name="line.921"></a>
-<span class="sourceLineNo">922</span>      }<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    }<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  }<a name="line.924"></a>
-<span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>  /**<a name="line.926"></a>
-<span class="sourceLineNo">927</span>   * @return True if the cluster is up.<a name="line.927"></a>
-<span class="sourceLineNo">928</span>   */<a name="line.928"></a>
-<span class="sourceLineNo">929</span>  @Override<a name="line.929"></a>
-<span class="sourceLineNo">930</span>  public boolean isClusterUp() {<a name="line.930"></a>
-<span class="sourceLineNo">931</span>    return this.masterless ||<a name="line.931"></a>
-<span class="sourceLineNo">932</span>        (this.clusterStatusTracker != null &amp;&amp; this.clusterStatusTracker.isClusterUp());<a name="line.932"></a>
-<span class="sourceLineNo">933</span>  }<a name="line.933"></a>
-<span class="sourceLineNo">934</span><a name="line.934"></a>
-<span class="sourceLineNo">935</span>  /**<a name="line.935"></a>
-<span class="sourceLineNo">936</span>   * The HRegionServer sticks in this loop until closed.<a name="line.936"></a>
-<span class="sourceLineNo">937</span>   */<a name="line.937"></a>
-<span class="sourceLineNo">938</span>  @Override<a name="line.938"></a>
-<span class="sourceLineNo">939</span>  public void run() {<a name="line.939"></a>
-<span class="sourceLineNo">940</span>    try {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>      // Do pre-registration initializations; zookeeper, lease threads, etc.<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      preRegistrationInitialization();<a name="line.942"></a>
-<span class="sourceLineNo">943</span>    } catch (Throwable e) {<a name="line.943"></a>
-<span class="sourceLineNo">944</span>      abort("Fatal exception during initialization", e);<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    }<a name="line.945"></a>
-<span class="sourceLineNo">946</span><a name="line.946"></a>
-<span class="sourceLineNo">947</span>    try {<a name="line.947"></a>
-<span class="sourceLineNo">948</span>      if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.948"></a>
-<span class="sourceLineNo">949</span>        ShutdownHook.install(conf, fs, this, Thread.currentThread());<a name="line.949"></a>
-<span class="sourceLineNo">950</span>        // Initialize the RegionServerCoprocessorHost now that our ephemeral<a name="line.950"></a>
-<span class="sourceLineNo">951</span>        // node was created, in case any coprocessors want to use ZooKeeper<a name="line.951"></a>
-<span class="sourceLineNo">952</span>        this.rsHost = new RegionServerCoprocessorHost(this, this.conf);<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      }<a name="line.953"></a>
-<span class="sourceLineNo">954</span><a name="line.954"></a>
-<span class="sourceLineNo">955</span>      // Try and register with the Master; tell it we are here.  Break if server is stopped or the<a name="line.955"></a>
-<span class="sourceLineNo">956</span>      // clusterup flag is down or hdfs went wacky. Once registered successfully, go ahead and start<a name="line.956"></a>
-<span class="sourceLineNo">957</span>      // up all Services. Use RetryCounter to get backoff in case Master is struggling to come up.<a name="line.957"></a>
-<span class="sourceLineNo">958</span>      LOG.debug("About to register with Master.");<a name="line.958"></a>
-<span class="sourceLineNo">959</span>      RetryCounterFactory rcf = new RetryCounterFactory(Integer.MAX_VALUE,<a name="line.959"></a>
-<span class="sourceLineNo">960</span>          this.sleeper.getPeriod(), 1000 * 60 * 5);<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      RetryCounter rc = rcf.create();<a name="line.961"></a>
-<span class="sourceLineNo">962</span>      while (keepLooping()) {<a name="line.962"></a>
-<span class="sourceLineNo">963</span>        RegionServerStartupResponse w = reportForDuty();<a name="line.963"></a>
-<span class="sourceLineNo">964</span>        if (w == null) {<a name="line.964"></a>
-<span class="sourceLineNo">965</span>          long sleepTime = rc.getBackoffTimeAndIncrementAttempts();<a name="line.965"></a>
-<span class="sourceLineNo">966</span>          LOG.warn("reportForDuty failed; sleeping {} ms and then retrying.", sleepTime);<a name="line.966"></a>
-<span class="sourceLineNo">967</span>          this.sleeper.sleep(sleepTime);<a name="line.967"></a>
-<span class="sourceLineNo">968</span>        } else {<a name="line.968"></a>
-<span class="sourceLineNo">969</span>          handleReportForDutyResponse(w);<a name="line.969"></a>
-<span class="sourceLineNo">970</span>          break;<a name="line.970"></a>
-<span class="sourceLineNo">971</span>        }<a name="line.971"></a>
-<span class="sourceLineNo">972</span>      }<a name="line.972"></a>
-<span class="sourceLineNo">973</span><a name="line.973"></a>
-<span class="sourceLineNo">974</span>      if (!isStopped() &amp;&amp; isHealthy()) {<a name="line.974"></a>
-<span class="sourceLineNo">975</span>        // start the snapshot handler and other procedure handlers,<a name="line.975"></a>
-<span class="sourceLineNo">976</span>        // since the server is ready to run<a name="line.976"></a>
-<span class="sourceLineNo">977</span>        if (this.rspmHost != null) {<a name="line.977"></a>
-<span class="sourceLineNo">978</span>          this.rspmHost.start();<a name="line.978"></a>
-<span class="sourceLineNo">979</span>        }<a name="line.979"></a>
-<span class="sourceLineNo">980</span>        // Start the Quota Manager<a name="line.980"></a>
-<span class="sourceLineNo">981</span>        if (this.rsQuotaManager != null) {<a name="line.981"></a>
-<span class="sourceLineNo">982</span>          rsQuotaManager.start(getRpcServer().getScheduler());<a name="line.982"></a>
-<span class="sourceLineNo">983</span>        }<a name="line.983"></a>
-<span class="sourceLineNo">984</span>        if (this.rsSpaceQuotaManager != null) {<a name="line.984"></a>
-<span class="sourceLineNo">985</span>          this.rsSpaceQuotaManager.start();<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        }<a name="line.986"></a>
-<span class="sourceLineNo">987</span>      }<a name="line.987"></a>
-<span class="sourceLineNo">988</span><a name="line.988"></a>
-<span class="sourceLineNo">989</span>      // We registered with the Master.  Go into run mode.<a name="line.989"></a>
-<span class="sourceLineNo">990</span>      long lastMsg = System.currentTimeMillis();<a name="line.990"></a>
-<span class="sourceLineNo">991</span>      long oldRequestCount = -1;<a name="line.991"></a>
-<span class="sourceLineNo">992</span>      // The main run loop.<a name="line.992"></a>
-<span class="sourceLineNo">993</span>      while (!isStopped() &amp;&amp; isHealthy()) {<a name="line.993"></a>
-<span class="sourceLineNo">994</span>        if (!isClusterUp()) {<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          if (isOnlineRegionsEmpty()) {<a name="line.995"></a>
-<span class="sourceLineNo">996</span>            stop("Exiting; cluster shutdown set and not carrying any regions");<a name="line.996"></a>
-<span class="sourceLineNo">997</span>          } else if (!this.stopping) {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>            this.stopping = true;<a name="line.998"></a>
-<span class="sourceLineNo">999</span>            LOG.info("Closing user regions");<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>            closeUserRegions(this.abortRequested);<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>          } else if (this.stopping) {<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>            boolean allUserRegionsOffline = areAllUserRegionsOffline();<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>            if (allUserRegionsOffline) {<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>              // Set stopped if no more write requests tp meta tables<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>              // since last time we went around the loop.  Any open<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>              // meta regions will be closed on our way out.<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>              if (oldRequestCount == getWriteRequestCount()) {<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>                stop("Stopped; only catalog regions remaining online");<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>                break;<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>              }<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>              oldRequestCount = getWriteRequestCount();<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>            } else {<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>              // Make sure all regions have been closed -- some regions may<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>              // have not got it because we were splitting at the time of<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>              // the call to closeUserRegions.<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>              closeUserRegions(this.abortRequested);<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>            }<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>            LOG.debug("Waiting on " + getOnlineRegionsAsPrintableString());<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>          }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>        }<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>        long now = System.currentTimeMillis();<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>        if ((now - lastMsg) &gt;= msgInterval) {<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>          tryRegionServerReport(lastMsg, now);<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>          lastMsg = System.currentTimeMillis();<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>        }<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>        if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>          this.sleeper.sleep();<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>        }<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>      } // for<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    } catch (Throwable t) {<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      if (!rpcServices.checkOOME(t)) {<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>        String prefix = t instanceof YouAreDeadException? "": "Unhandled: ";<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        abort(prefix + t.getMessage(), t);<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      }<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>    }<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span><a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>    if (abortRequested) {<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>      Timer abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      TimerTask abortTimeoutTask = null;<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>      try {<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>        abortTimeoutTask =<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>            Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>                .asSubclass(TimerTask.class).getDeclaredConstructor().newInstance();<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>      } catch (Exception e) {<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>      }<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>      if (abortTimeoutTask != null) {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>      }<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span><a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    if (this.leases != null) {<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>      this.leases.closeAfterLeasesExpire();<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>    }<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    if (this.splitLogWorker != null) {<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>      splitLogWorker.stop();<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    }<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    if (this.infoServer != null) {<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      LOG.info("Stopping infoServer");<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      try {<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>        this.infoServer.stop();<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>      } catch (Exception e) {<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>        LOG.error("Failed to stop infoServer", e);<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>      }<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    }<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    // Send cache a shutdown.<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    if (cacheConfig != null &amp;&amp; cacheConfig.isBlockCacheEnabled()) {<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>      cacheConfig.getBlockCache().shutdown();<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>    }<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    mobCacheConfig.getMobFileCache().shutdown();<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span><a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    if (movedRegionsCleaner != null) {<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>      movedRegionsCleaner.stop("Region Server stopping");<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>    // Send interrupts to wake up threads if sleeping so they notice shutdown.<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    // TODO: Should we check they are alive? If OOME could have exited already<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>    if (this.hMemManager != null) this.hMemManager.stop();<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    if (this.cacheFlusher != null) this.cacheFlusher.interruptIfNecessary();<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    if (this.compactSplitThread != null) this.compactSplitThread.interruptIfNecessary();<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>    sendShutdownInterrupt();<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span><a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>    // Stop the snapshot and other procedure handlers, forcefully killing all running tasks<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>    if (rspmHost != null) {<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>      rspmHost.stop(this.abortRequested || this.killed);<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    }<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span><a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    if (this.killed) {<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>      // Just skip out w/o closing regions.  Used when testing.<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    } else if (abortRequested) {<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>      if (this.fsOk) {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>        closeUserRegions(abortRequested); // Don't leave any open file handles<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      }<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>      LOG.info("aborting server " + this.serverName);<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    } else {<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      closeUserRegions(abortRequested);<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>      LOG.info("stopping server " + this.serverName);<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>    // so callers waiting for meta without timeout can stop<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    if (this.metaTableLocator != null) this.metaTableLocator.stop();<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    if (this.clusterConnection != null &amp;&amp; !clusterConnection.isClosed()) {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>      try {<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>        this.clusterConnection.close();<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>      } catch (IOException e) {<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>        // Although the {@link Closeable} interface throws an {@link<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>        // IOException}, in reality, the implementation would never do that.<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>        LOG.warn("Attempt to close server's short circuit ClusterConnection failed.", e);<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      }<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    }<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span><a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>    // Closing the compactSplit thread before closing meta regions<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>    if (!this.killed &amp;&amp; containsMetaTableRegions()) {<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>      if (!abortRequested || this.fsOk) {<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>        if (this.compactSplitThread != null) {<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>          this.compactSplitThread.join();<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>          this.compactSplitThread = null;<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>        }<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>        closeMetaTableRegions(abortRequested);<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>      }<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>    }<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span><a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    if (!this.killed &amp;&amp; this.fsOk) {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>      waitOnAllRegionsToClose(abortRequested);<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>      LOG.info("stopping server " + this.serverName + "; all regions closed.");<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>    // Stop the quota manager<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    if (rsQuotaManager != null) {<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>      rsQuotaManager.stop();<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    }<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    if (rsSpaceQuotaManager != null) {<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>      rsSpaceQuotaManager.stop();<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>      rsSpaceQuotaManager = null;<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>    //fsOk flag may be changed when closing regions throws exception.<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>    if (this.fsOk) {<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>      shutdownWAL(!abortRequested);<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>    // Make sure the proxy is down.<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    if (this.rssStub != null) {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>      this.rssStub = null;<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>    }<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    if (this.lockStub != null) {<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>      this.lockStub = null;<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>    }<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    if (this.rpcClient != null) {<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>      this.rpcClient.close();<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    }<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>    if (this.leases != null) {<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>      this.leases.close();<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>    }<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>    if (this.pauseMonitor != null) {<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>      this.pauseMonitor.stop();<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    }<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span><a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    if (!killed) {<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      stopServiceThreads();<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>    if (this.rpcServices != null) {<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      this.rpcServices.stop();<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>    try {<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>      deleteMyEphemeralNode();<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    } catch (KeeperException.NoNodeException nn) {<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>    } catch (KeeperException e) {<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>      LOG.warn("Failed deleting my ephemeral node", e);<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>    }<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    // We may have failed to delete the znode at the previous step, but<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>    //  we delete the file anyway: a second attempt to delete the znode is likely to fail again.<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    ZNodeClearer.deleteMyEphemeralNodeOnDisk();<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span><a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    if (this.zooKeeper != null) {<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>      this.zooKeeper.close();<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    }<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>    this.shutDown = true;<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>    LOG.info("Exiting; stopping=" + this.serverName + "; zookeeper connection closed.");<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>  private boolean containsMetaTableRegions() {<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    return onlineRegions.containsKey(RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedName());<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>  private boolean areAllUserRegionsOffline() {<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>    if (getNumberOfOnlineRegions() &gt; 2) return false;<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>    boolean allUserRegionsOffline = true;<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>      if (!e.getValue().getRegionInfo().isMetaRegion()) {<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>        allUserRegionsOffline = false;<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>        break;<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      }<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>    }<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>    return allUserRegionsOffline;<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>  /**<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>   * @return Current write count for all online regions.<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>   */<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>  private long getWriteRequestCount() {<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>    long writeCount = 0;<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>      writeCount += e.getValue().getWriteRequestsCount();<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>    }<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>    return writeCount;<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>  @VisibleForTesting<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>  protected void tryRegionServerReport(long reportStartTime, long reportEndTime)<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>      throws IOException {<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>    if (rss == null) {<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>      // the current server could be stopping.<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>      return;<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>    }<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>    ClusterStatusProtos.ServerLoad sl = buildServerLoad(reportStartTime, reportEndTime);<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>    try {<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>      RegionServerReportRequest.Builder request = RegionServerReportRequest.newBuilder();<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>      request.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>      request.setLoad(sl);<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>      rss.regionServerReport(null, request.build());<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>    } catch (ServiceException se) {<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>        // This will be caught and handled as a fatal error in run()<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>        throw ioe;<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>      }<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>      if (rssStub == rss) {<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>        rssStub = null;<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>      }<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>      // Method blocks until new master is found or we are stopped<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>      createRegionServerStatusStub(true);<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>    }<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>  }<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span><a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>  /**<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>   *<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>   * @param regionSizeStore The store containing region sizes<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>   */<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>    if (rss == null) {<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>      // the current server could be stopping.<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>      return true;<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    }<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>    try {<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>    } catch (ServiceException se) {<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>            + " This will be retried.", ioe);<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>        return true;<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>      }<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      if (rssStub == rss) {<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>        rssStub = null;<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>      }<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>      createRegionServerStatusStub(true);<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>            return false;<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>          }<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>        }<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>      }<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>    }<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>    return true;<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>  }<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span><a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>  /**<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>   *<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>   * @param rss The stub to send to the Master<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>   * @param regionSizeStore The store containing region sizes<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>   */<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>  void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>    RegionSpaceUseReportRequest request =<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>    // Record the number of size reports sent<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>    if (metricsRegionServer != null) {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>    }<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>  }<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span><a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>  /**<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>   *<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>   * @param regionSizes The size in bytes of regions<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>   * @return The corresponding protocol buffer message.<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>   */<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>    }<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>    return request.build();<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>  }<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span><a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>  /**<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>   * protobuf message.<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>   *<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>   * @param regionInfo The RegionInfo<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>   * @return The protocol buffer<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>   */<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>    return RegionSpaceUse.newBuilder()<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>        .build();<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>  }<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span><a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>  ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>      throws IOException {<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>    // the wrapper to compute those numbers in one place.<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    // history.<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>    long usedMemory = -1L;<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>    long maxMemory = -1L;<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>    if (usage != null) {<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>      usedMemory = usage.getUsed();<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>      maxMemory = usage.getMax();<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>    }<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span><a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1348"></a>
-<span

<TRUNCATED>

[15/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/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 6591d6c..b31c78e 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
@@ -923,3042 +923,3045 @@
 <span class="sourceLineNo">915</span><a name="line.915"></a>
 <span class="sourceLineNo">916</span>    this.masterActiveTime = System.currentTimeMillis();<a name="line.916"></a>
 <span class="sourceLineNo">917</span>    // TODO: Do this using Dependency Injection, using PicoContainer, Guice or Spring.<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    // Initialize the chunkCreator<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    initializeMemStoreChunkCreator();<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.920"></a>
-<span class="sourceLineNo">921</span>    this.walManager = new MasterWalManager(this);<a name="line.921"></a>
-<span class="sourceLineNo">922</span><a name="line.922"></a>
-<span class="sourceLineNo">923</span>    // enable table descriptors cache<a name="line.923"></a>
-<span class="sourceLineNo">924</span>    this.tableDescriptors.setCacheOn();<a name="line.924"></a>
+<span class="sourceLineNo">918</span><a name="line.918"></a>
+<span class="sourceLineNo">919</span>    // Only initialize the MemStoreLAB when master carry table<a name="line.919"></a>
+<span class="sourceLineNo">920</span>    if (LoadBalancer.isTablesOnMaster(conf)) {<a name="line.920"></a>
+<span class="sourceLineNo">921</span>      initializeMemStoreChunkCreator();<a name="line.921"></a>
+<span class="sourceLineNo">922</span>    }<a name="line.922"></a>
+<span class="sourceLineNo">923</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.923"></a>
+<span class="sourceLineNo">924</span>    this.walManager = new MasterWalManager(this);<a name="line.924"></a>
 <span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>    // warm-up HTDs cache on master initialization<a name="line.926"></a>
-<span class="sourceLineNo">927</span>    if (preLoadTableDescriptors) {<a name="line.927"></a>
-<span class="sourceLineNo">928</span>      status.setStatus("Pre-loading table descriptors");<a name="line.928"></a>
-<span class="sourceLineNo">929</span>      this.tableDescriptors.getAll();<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>    // Publish cluster ID; set it in Master too. The superclass RegionServer does this later but<a name="line.932"></a>
-<span class="sourceLineNo">933</span>    // only after it has checked in with the Master. At least a few tests ask Master for clusterId<a name="line.933"></a>
-<span class="sourceLineNo">934</span>    // before it has called its run method and before RegionServer has done the reportForDuty.<a name="line.934"></a>
-<span class="sourceLineNo">935</span>    ClusterId clusterId = fileSystemManager.getClusterId();<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    status.setStatus("Publishing Cluster ID " + clusterId + " in ZooKeeper");<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.937"></a>
-<span class="sourceLineNo">938</span>    this.clusterId = clusterId.toString();<a name="line.938"></a>
-<span class="sourceLineNo">939</span><a name="line.939"></a>
-<span class="sourceLineNo">940</span>    // Precaution. Put in place the old hbck1 lock file to fence out old hbase1s running their<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    // hbck1s against an hbase2 cluster; it could do damage. To skip this behavior, set<a name="line.941"></a>
-<span class="sourceLineNo">942</span>    // hbase.write.hbck1.lock.file to false.<a name="line.942"></a>
-<span class="sourceLineNo">943</span>    if (this.conf.getBoolean("hbase.write.hbck1.lock.file", true)) {<a name="line.943"></a>
-<span class="sourceLineNo">944</span>      HBaseFsck.checkAndMarkRunningHbck(this.conf,<a name="line.944"></a>
-<span class="sourceLineNo">945</span>          HBaseFsck.createLockRetryCounterFactory(this.conf).create());<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    }<a name="line.946"></a>
-<span class="sourceLineNo">947</span><a name="line.947"></a>
-<span class="sourceLineNo">948</span>    status.setStatus("Initialize ServerManager and schedule SCP for crash servers");<a name="line.948"></a>
-<span class="sourceLineNo">949</span>    this.serverManager = createServerManager(this);<a name="line.949"></a>
-<span class="sourceLineNo">950</span>    createProcedureExecutor();<a name="line.950"></a>
-<span class="sourceLineNo">951</span>    @SuppressWarnings("rawtypes")<a name="line.951"></a>
-<span class="sourceLineNo">952</span>    Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType =<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      procedureExecutor.getActiveProceduresNoCopy().stream()<a name="line.953"></a>
-<span class="sourceLineNo">954</span>        .collect(Collectors.groupingBy(p -&gt; p.getClass()));<a name="line.954"></a>
-<span class="sourceLineNo">955</span><a name="line.955"></a>
-<span class="sourceLineNo">956</span>    checkUnsupportedProcedure(procsByType);<a name="line.956"></a>
-<span class="sourceLineNo">957</span><a name="line.957"></a>
-<span class="sourceLineNo">958</span>    // Create Assignment Manager<a name="line.958"></a>
-<span class="sourceLineNo">959</span>    this.assignmentManager = createAssignmentManager(this);<a name="line.959"></a>
-<span class="sourceLineNo">960</span>    this.assignmentManager.start();<a name="line.960"></a>
-<span class="sourceLineNo">961</span>    // TODO: TRSP can perform as the sub procedure for other procedures, so even if it is marked as<a name="line.961"></a>
-<span class="sourceLineNo">962</span>    // completed, it could still be in the procedure list. This is a bit strange but is another<a name="line.962"></a>
-<span class="sourceLineNo">963</span>    // story, need to verify the implementation for ProcedureExecutor and ProcedureStore.<a name="line.963"></a>
-<span class="sourceLineNo">964</span>    List&lt;TransitRegionStateProcedure&gt; ritList =<a name="line.964"></a>
-<span class="sourceLineNo">965</span>      procsByType.getOrDefault(TransitRegionStateProcedure.class, Collections.emptyList()).stream()<a name="line.965"></a>
-<span class="sourceLineNo">966</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p)<a name="line.966"></a>
-<span class="sourceLineNo">967</span>        .collect(Collectors.toList());<a name="line.967"></a>
-<span class="sourceLineNo">968</span>    this.assignmentManager.setupRIT(ritList);<a name="line.968"></a>
-<span class="sourceLineNo">969</span><a name="line.969"></a>
-<span class="sourceLineNo">970</span>    // Start RegionServerTracker with listing of servers found with exiting SCPs -- these should<a name="line.970"></a>
-<span class="sourceLineNo">971</span>    // be registered in the deadServers set -- and with the list of servernames out on the<a name="line.971"></a>
-<span class="sourceLineNo">972</span>    // filesystem that COULD BE 'alive' (we'll schedule SCPs for each and let SCP figure it out).<a name="line.972"></a>
-<span class="sourceLineNo">973</span>    // We also pass dirs that are already 'splitting'... so we can do some checks down in tracker.<a name="line.973"></a>
-<span class="sourceLineNo">974</span>    // TODO: Generate the splitting and live Set in one pass instead of two as we currently do.<a name="line.974"></a>
-<span class="sourceLineNo">975</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.975"></a>
-<span class="sourceLineNo">976</span>    this.regionServerTracker.start(<a name="line.976"></a>
-<span class="sourceLineNo">977</span>      procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.977"></a>
-<span class="sourceLineNo">978</span>        .map(p -&gt; (ServerCrashProcedure) p).map(p -&gt; p.getServerName()).collect(Collectors.toSet()),<a name="line.978"></a>
-<span class="sourceLineNo">979</span>      walManager.getLiveServersFromWALDir(), walManager.getSplittingServersFromWALDir());<a name="line.979"></a>
-<span class="sourceLineNo">980</span>    // This manager will be started AFTER hbase:meta is confirmed on line.<a name="line.980"></a>
-<span class="sourceLineNo">981</span>    // hbase.mirror.table.state.to.zookeeper is so hbase1 clients can connect. They read table<a name="line.981"></a>
-<span class="sourceLineNo">982</span>    // state from zookeeper while hbase2 reads it from hbase:meta. Disable if no hbase1 clients.<a name="line.982"></a>
-<span class="sourceLineNo">983</span>    this.tableStateManager =<a name="line.983"></a>
-<span class="sourceLineNo">984</span>      this.conf.getBoolean(MirroringTableStateManager.MIRROR_TABLE_STATE_TO_ZK_KEY, true)<a name="line.984"></a>
-<span class="sourceLineNo">985</span>        ?<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        new MirroringTableStateManager(this):<a name="line.986"></a>
-<span class="sourceLineNo">987</span>        new TableStateManager(this);<a name="line.987"></a>
-<span class="sourceLineNo">988</span><a name="line.988"></a>
-<span class="sourceLineNo">989</span>    status.setStatus("Initializing ZK system trackers");<a name="line.989"></a>
-<span class="sourceLineNo">990</span>    initializeZKBasedSystemTrackers();<a name="line.990"></a>
-<span class="sourceLineNo">991</span>    status.setStatus("Loading last flushed sequence id of regions");<a name="line.991"></a>
-<span class="sourceLineNo">992</span>    try {<a name="line.992"></a>
-<span class="sourceLineNo">993</span>      this.serverManager.loadLastFlushedSequenceIds();<a name="line.993"></a>
-<span class="sourceLineNo">994</span>    } catch (IOException e) {<a name="line.994"></a>
-<span class="sourceLineNo">995</span>      LOG.debug("Failed to load last flushed sequence id of regions"<a name="line.995"></a>
-<span class="sourceLineNo">996</span>          + " from file system", e);<a name="line.996"></a>
-<span class="sourceLineNo">997</span>    }<a name="line.997"></a>
-<span class="sourceLineNo">998</span>    // Set ourselves as active Master now our claim has succeeded up in zk.<a name="line.998"></a>
-<span class="sourceLineNo">999</span>    this.activeMaster = true;<a name="line.999"></a>
-<span class="sourceLineNo">1000</span><a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>    // This is for backwards compatibility<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>    // See HBASE-11393<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>    ReplicationPeerConfigUpgrader tableCFsUpdater =<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>        new ReplicationPeerConfigUpgrader(zooKeeper, conf);<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>    tableCFsUpdater.copyTableCFs();<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span><a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>    if (!maintenanceMode) {<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>      // Add the Observer to delete quotas on table deletion before starting all CPs by<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>      // default with quota support, avoiding if user specifically asks to not load this Observer.<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>      if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>        updateConfigurationForQuotasObserver(conf);<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>      }<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      // initialize master side coprocessors before we start handling requests<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>      status.setStatus("Initializing master coprocessors");<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>      this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>    }<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span><a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>    // Checking if meta needs initializing.<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    status.setStatus("Initializing meta table if this is a new deploy");<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>    InitMetaProcedure initMetaProc = null;<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>    // Print out state of hbase:meta on startup; helps debugging.<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>    RegionState rs = this.assignmentManager.getRegionStates().<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>        getRegionState(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>    LOG.info("hbase:meta {}", rs);<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>    if (rs.isOffline()) {<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>      Optional&lt;InitMetaProcedure&gt; optProc = procedureExecutor.getProcedures().stream()<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>        .filter(p -&gt; p instanceof InitMetaProcedure).map(o -&gt; (InitMetaProcedure) o).findAny();<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>      initMetaProc = optProc.orElseGet(() -&gt; {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>        // schedule an init meta procedure if meta has not been deployed yet<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>        InitMetaProcedure temp = new InitMetaProcedure();<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>        procedureExecutor.submitProcedure(temp);<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        return temp;<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      });<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>    }<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>    if (this.balancer instanceof FavoredNodesPromoter) {<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>      favoredNodesManager = new FavoredNodesManager(this);<a name="line.1037"></a>
+<span class="sourceLineNo">926</span>    // enable table descriptors cache<a name="line.926"></a>
+<span class="sourceLineNo">927</span>    this.tableDescriptors.setCacheOn();<a name="line.927"></a>
+<span class="sourceLineNo">928</span><a name="line.928"></a>
+<span class="sourceLineNo">929</span>    // warm-up HTDs cache on master initialization<a name="line.929"></a>
+<span class="sourceLineNo">930</span>    if (preLoadTableDescriptors) {<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      status.setStatus("Pre-loading table descriptors");<a name="line.931"></a>
+<span class="sourceLineNo">932</span>      this.tableDescriptors.getAll();<a name="line.932"></a>
+<span class="sourceLineNo">933</span>    }<a name="line.933"></a>
+<span class="sourceLineNo">934</span><a name="line.934"></a>
+<span class="sourceLineNo">935</span>    // Publish cluster ID; set it in Master too. The superclass RegionServer does this later but<a name="line.935"></a>
+<span class="sourceLineNo">936</span>    // only after it has checked in with the Master. At least a few tests ask Master for clusterId<a name="line.936"></a>
+<span class="sourceLineNo">937</span>    // before it has called its run method and before RegionServer has done the reportForDuty.<a name="line.937"></a>
+<span class="sourceLineNo">938</span>    ClusterId clusterId = fileSystemManager.getClusterId();<a name="line.938"></a>
+<span class="sourceLineNo">939</span>    status.setStatus("Publishing Cluster ID " + clusterId + " in ZooKeeper");<a name="line.939"></a>
+<span class="sourceLineNo">940</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.940"></a>
+<span class="sourceLineNo">941</span>    this.clusterId = clusterId.toString();<a name="line.941"></a>
+<span class="sourceLineNo">942</span><a name="line.942"></a>
+<span class="sourceLineNo">943</span>    // Precaution. Put in place the old hbck1 lock file to fence out old hbase1s running their<a name="line.943"></a>
+<span class="sourceLineNo">944</span>    // hbck1s against an hbase2 cluster; it could do damage. To skip this behavior, set<a name="line.944"></a>
+<span class="sourceLineNo">945</span>    // hbase.write.hbck1.lock.file to false.<a name="line.945"></a>
+<span class="sourceLineNo">946</span>    if (this.conf.getBoolean("hbase.write.hbck1.lock.file", true)) {<a name="line.946"></a>
+<span class="sourceLineNo">947</span>      HBaseFsck.checkAndMarkRunningHbck(this.conf,<a name="line.947"></a>
+<span class="sourceLineNo">948</span>          HBaseFsck.createLockRetryCounterFactory(this.conf).create());<a name="line.948"></a>
+<span class="sourceLineNo">949</span>    }<a name="line.949"></a>
+<span class="sourceLineNo">950</span><a name="line.950"></a>
+<span class="sourceLineNo">951</span>    status.setStatus("Initialize ServerManager and schedule SCP for crash servers");<a name="line.951"></a>
+<span class="sourceLineNo">952</span>    this.serverManager = createServerManager(this);<a name="line.952"></a>
+<span class="sourceLineNo">953</span>    createProcedureExecutor();<a name="line.953"></a>
+<span class="sourceLineNo">954</span>    @SuppressWarnings("rawtypes")<a name="line.954"></a>
+<span class="sourceLineNo">955</span>    Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType =<a name="line.955"></a>
+<span class="sourceLineNo">956</span>      procedureExecutor.getActiveProceduresNoCopy().stream()<a name="line.956"></a>
+<span class="sourceLineNo">957</span>        .collect(Collectors.groupingBy(p -&gt; p.getClass()));<a name="line.957"></a>
+<span class="sourceLineNo">958</span><a name="line.958"></a>
+<span class="sourceLineNo">959</span>    checkUnsupportedProcedure(procsByType);<a name="line.959"></a>
+<span class="sourceLineNo">960</span><a name="line.960"></a>
+<span class="sourceLineNo">961</span>    // Create Assignment Manager<a name="line.961"></a>
+<span class="sourceLineNo">962</span>    this.assignmentManager = createAssignmentManager(this);<a name="line.962"></a>
+<span class="sourceLineNo">963</span>    this.assignmentManager.start();<a name="line.963"></a>
+<span class="sourceLineNo">964</span>    // TODO: TRSP can perform as the sub procedure for other procedures, so even if it is marked as<a name="line.964"></a>
+<span class="sourceLineNo">965</span>    // completed, it could still be in the procedure list. This is a bit strange but is another<a name="line.965"></a>
+<span class="sourceLineNo">966</span>    // story, need to verify the implementation for ProcedureExecutor and ProcedureStore.<a name="line.966"></a>
+<span class="sourceLineNo">967</span>    List&lt;TransitRegionStateProcedure&gt; ritList =<a name="line.967"></a>
+<span class="sourceLineNo">968</span>      procsByType.getOrDefault(TransitRegionStateProcedure.class, Collections.emptyList()).stream()<a name="line.968"></a>
+<span class="sourceLineNo">969</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p)<a name="line.969"></a>
+<span class="sourceLineNo">970</span>        .collect(Collectors.toList());<a name="line.970"></a>
+<span class="sourceLineNo">971</span>    this.assignmentManager.setupRIT(ritList);<a name="line.971"></a>
+<span class="sourceLineNo">972</span><a name="line.972"></a>
+<span class="sourceLineNo">973</span>    // Start RegionServerTracker with listing of servers found with exiting SCPs -- these should<a name="line.973"></a>
+<span class="sourceLineNo">974</span>    // be registered in the deadServers set -- and with the list of servernames out on the<a name="line.974"></a>
+<span class="sourceLineNo">975</span>    // filesystem that COULD BE 'alive' (we'll schedule SCPs for each and let SCP figure it out).<a name="line.975"></a>
+<span class="sourceLineNo">976</span>    // We also pass dirs that are already 'splitting'... so we can do some checks down in tracker.<a name="line.976"></a>
+<span class="sourceLineNo">977</span>    // TODO: Generate the splitting and live Set in one pass instead of two as we currently do.<a name="line.977"></a>
+<span class="sourceLineNo">978</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.978"></a>
+<span class="sourceLineNo">979</span>    this.regionServerTracker.start(<a name="line.979"></a>
+<span class="sourceLineNo">980</span>      procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.980"></a>
+<span class="sourceLineNo">981</span>        .map(p -&gt; (ServerCrashProcedure) p).map(p -&gt; p.getServerName()).collect(Collectors.toSet()),<a name="line.981"></a>
+<span class="sourceLineNo">982</span>      walManager.getLiveServersFromWALDir(), walManager.getSplittingServersFromWALDir());<a name="line.982"></a>
+<span class="sourceLineNo">983</span>    // This manager will be started AFTER hbase:meta is confirmed on line.<a name="line.983"></a>
+<span class="sourceLineNo">984</span>    // hbase.mirror.table.state.to.zookeeper is so hbase1 clients can connect. They read table<a name="line.984"></a>
+<span class="sourceLineNo">985</span>    // state from zookeeper while hbase2 reads it from hbase:meta. Disable if no hbase1 clients.<a name="line.985"></a>
+<span class="sourceLineNo">986</span>    this.tableStateManager =<a name="line.986"></a>
+<span class="sourceLineNo">987</span>      this.conf.getBoolean(MirroringTableStateManager.MIRROR_TABLE_STATE_TO_ZK_KEY, true)<a name="line.987"></a>
+<span class="sourceLineNo">988</span>        ?<a name="line.988"></a>
+<span class="sourceLineNo">989</span>        new MirroringTableStateManager(this):<a name="line.989"></a>
+<span class="sourceLineNo">990</span>        new TableStateManager(this);<a name="line.990"></a>
+<span class="sourceLineNo">991</span><a name="line.991"></a>
+<span class="sourceLineNo">992</span>    status.setStatus("Initializing ZK system trackers");<a name="line.992"></a>
+<span class="sourceLineNo">993</span>    initializeZKBasedSystemTrackers();<a name="line.993"></a>
+<span class="sourceLineNo">994</span>    status.setStatus("Loading last flushed sequence id of regions");<a name="line.994"></a>
+<span class="sourceLineNo">995</span>    try {<a name="line.995"></a>
+<span class="sourceLineNo">996</span>      this.serverManager.loadLastFlushedSequenceIds();<a name="line.996"></a>
+<span class="sourceLineNo">997</span>    } catch (IOException e) {<a name="line.997"></a>
+<span class="sourceLineNo">998</span>      LOG.debug("Failed to load last flushed sequence id of regions"<a name="line.998"></a>
+<span class="sourceLineNo">999</span>          + " from file system", e);<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>    }<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>    // Set ourselves as active Master now our claim has succeeded up in zk.<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>    this.activeMaster = true;<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span><a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>    // This is for backwards compatibility<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>    // See HBASE-11393<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>    ReplicationPeerConfigUpgrader tableCFsUpdater =<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>        new ReplicationPeerConfigUpgrader(zooKeeper, conf);<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>    tableCFsUpdater.copyTableCFs();<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span><a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>    if (!maintenanceMode) {<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>      // Add the Observer to delete quotas on table deletion before starting all CPs by<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>      // default with quota support, avoiding if user specifically asks to not load this Observer.<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>      if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>        updateConfigurationForQuotasObserver(conf);<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>      }<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>      // initialize master side coprocessors before we start handling requests<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>      status.setStatus("Initializing master coprocessors");<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>      this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>    }<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span><a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>    // Checking if meta needs initializing.<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>    status.setStatus("Initializing meta table if this is a new deploy");<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>    InitMetaProcedure initMetaProc = null;<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>    // Print out state of hbase:meta on startup; helps debugging.<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>    RegionState rs = this.assignmentManager.getRegionStates().<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>        getRegionState(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>    LOG.info("hbase:meta {}", rs);<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>    if (rs.isOffline()) {<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>      Optional&lt;InitMetaProcedure&gt; optProc = procedureExecutor.getProcedures().stream()<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>        .filter(p -&gt; p instanceof InitMetaProcedure).map(o -&gt; (InitMetaProcedure) o).findAny();<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      initMetaProc = optProc.orElseGet(() -&gt; {<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>        // schedule an init meta procedure if meta has not been deployed yet<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>        InitMetaProcedure temp = new InitMetaProcedure();<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>        procedureExecutor.submitProcedure(temp);<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>        return temp;<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>      });<a name="line.1037"></a>
 <span class="sourceLineNo">1038</span>    }<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span><a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>    // initialize load balancer<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>    this.balancer.setMasterServices(this);<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>    this.balancer.initialize();<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span><a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    // start up all service threads.<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    status.setStatus("Initializing master service threads");<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>    startServiceThreads();<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>    // wait meta to be initialized after we start procedure executor<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    if (initMetaProc != null) {<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>      initMetaProc.await();<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>    }<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    // Wake up this server to check in<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    sleeper.skipSleepCycle();<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span><a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    // Wait for region servers to report in.<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>    // With this as part of master initialization, it precludes our being able to start a single<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    // server that is both Master and RegionServer. Needs more thought. TODO.<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    String statusStr = "Wait for region servers to report in";<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    status.setStatus(statusStr);<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>    LOG.info(Objects.toString(status));<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>    waitForRegionServers(status);<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span><a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>    // Check if master is shutting down because issue initializing regionservers or balancer.<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    if (isStopped()) {<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>      return;<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    }<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span><a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    status.setStatus("Starting assignment manager");<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>    // FIRST HBASE:META READ!!!!<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    // The below cannot make progress w/o hbase:meta being online.<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    // This is the FIRST attempt at going to hbase:meta. Meta on-lining is going on in background<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    // as procedures run -- in particular SCPs for crashed servers... One should put up hbase:meta<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    // if it is down. It may take a while to come online. So, wait here until meta if for sure<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    // available. That's what waitForMetaOnline does.<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    if (!waitForMetaOnline()) {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>      return;<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    }<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>    this.assignmentManager.joinCluster();<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    // The below depends on hbase:meta being online.<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    this.tableStateManager.start();<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>    // Initialize after meta is up as below scans meta<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    if (favoredNodesManager != null &amp;&amp; !maintenanceMode) {<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>      SnapshotOfRegionAssignmentFromMeta snapshotOfRegionAssignment =<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>          new SnapshotOfRegionAssignmentFromMeta(getConnection());<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>      snapshotOfRegionAssignment.initialize();<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>      favoredNodesManager.initialize(snapshotOfRegionAssignment);<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>    }<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span><a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    // set cluster status again after user regions are assigned<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1090"></a>
+<span class="sourceLineNo">1039</span>    if (this.balancer instanceof FavoredNodesPromoter) {<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>      favoredNodesManager = new FavoredNodesManager(this);<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>    }<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span><a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>    // initialize load balancer<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>    this.balancer.setMasterServices(this);<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>    this.balancer.initialize();<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span><a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>    // start up all service threads.<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>    status.setStatus("Initializing master service threads");<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>    startServiceThreads();<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>    // wait meta to be initialized after we start procedure executor<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>    if (initMetaProc != null) {<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>      initMetaProc.await();<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>    }<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>    // Wake up this server to check in<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>    sleeper.skipSleepCycle();<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span><a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>    // Wait for region servers to report in.<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>    // With this as part of master initialization, it precludes our being able to start a single<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>    // server that is both Master and RegionServer. Needs more thought. TODO.<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    String statusStr = "Wait for region servers to report in";<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>    status.setStatus(statusStr);<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>    LOG.info(Objects.toString(status));<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>    waitForRegionServers(status);<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span><a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    // Check if master is shutting down because issue initializing regionservers or balancer.<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>    if (isStopped()) {<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>      return;<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>    }<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span><a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>    status.setStatus("Starting assignment manager");<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>    // FIRST HBASE:META READ!!!!<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>    // The below cannot make progress w/o hbase:meta being online.<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    // This is the FIRST attempt at going to hbase:meta. Meta on-lining is going on in background<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    // as procedures run -- in particular SCPs for crashed servers... One should put up hbase:meta<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    // if it is down. It may take a while to come online. So, wait here until meta if for sure<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    // available. That's what waitForMetaOnline does.<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>    if (!waitForMetaOnline()) {<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      return;<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>    }<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>    this.assignmentManager.joinCluster();<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>    // The below depends on hbase:meta being online.<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>    this.tableStateManager.start();<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>    // Initialize after meta is up as below scans meta<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    if (favoredNodesManager != null &amp;&amp; !maintenanceMode) {<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>      SnapshotOfRegionAssignmentFromMeta snapshotOfRegionAssignment =<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>          new SnapshotOfRegionAssignmentFromMeta(getConnection());<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      snapshotOfRegionAssignment.initialize();<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>      favoredNodesManager.initialize(snapshotOfRegionAssignment);<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>    }<a name="line.1090"></a>
 <span class="sourceLineNo">1091</span><a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>    this.balancerChore = new BalancerChore(this);<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>    getChoreService().scheduleChore(balancerChore);<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>    this.catalogJanitorChore = new CatalogJanitor(this);<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    this.serverManager.startChore();<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span><a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>    // NAMESPACE READ!!!!<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    // Here we expect hbase:namespace to be online. See inside initClusterSchemaService.<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    // TODO: Fix this. Namespace is a pain being a sort-of system table. Fold it in to hbase:meta.<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    // isNamespace does like isMeta and waits until namespace is onlined before allowing progress.<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    if (!waitForNamespaceOnline()) {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      return;<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    }<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>    status.setStatus("Starting cluster schema service");<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>    initClusterSchemaService();<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span><a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>    if (this.cpHost != null) {<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>      try {<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>        this.cpHost.preMasterInitialization();<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>      } catch (IOException e) {<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<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><a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>    status.markComplete("Initialization successful");<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    LOG.info(String.format("Master has completed initialization %.3fsec",<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>       (System.currentTimeMillis() - masterActiveTime) / 1000.0f));<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    this.masterFinishedInitializationTime = System.currentTimeMillis();<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>    configurationManager.registerObserver(this.balancer);<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    configurationManager.registerObserver(this.hfileCleaner);<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>    configurationManager.registerObserver(this.logCleaner);<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    // Set master as 'initialized'.<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>    setInitialized(true);<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span><a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    if (maintenanceMode) {<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>      LOG.info("Detected repair mode, skipping final initialization steps.");<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>      return;<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>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>    status.setStatus("Assign meta replicas");<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap();<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>    metaBootstrap.assignMetaReplicas();<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>    status.setStatus("Starting quota manager");<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>    initQuotaManager();<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>      // Create the quota snapshot notifier<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>      spaceQuotaSnapshotNotifier = createQuotaSnapshotNotifier();<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>      spaceQuotaSnapshotNotifier.initialize(getClusterConnection());<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>      this.quotaObserverChore = new QuotaObserverChore(this, getMasterMetrics());<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>      // Start the chore to read the region FS space reports and act on them<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>      getChoreService().scheduleChore(quotaObserverChore);<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span><a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>      this.snapshotQuotaChore = new SnapshotQuotaObserverChore(this, getMasterMetrics());<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>      // Start the chore to read snapshots and add their usage to table/NS quotas<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>      getChoreService().scheduleChore(snapshotQuotaChore);<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>    // clear the dead servers with same host name and port of online server because we are not<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    // removing dead server with same hostname and port of rs which is trying to check in before<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>    // master initialization. See HBASE-5916.<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    this.serverManager.clearDeadServersWithSameHostNameAndPortOfOnlineServer();<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span><a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    // Check and set the znode ACLs if needed in case we are overtaking a non-secure configuration<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>    status.setStatus("Checking ZNode ACLs");<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>    zooKeeper.checkAndSetZNodeAcls();<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span><a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    status.setStatus("Initializing MOB Cleaner");<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>    initMobCleaner();<a name="line.1166"></a>
+<span class="sourceLineNo">1092</span>    // set cluster status again after user regions are assigned<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span><a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>    this.balancerChore = new BalancerChore(this);<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>    getChoreService().scheduleChore(balancerChore);<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>    this.catalogJanitorChore = new CatalogJanitor(this);<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>    this.serverManager.startChore();<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span><a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>    // NAMESPACE READ!!!!<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    // Here we expect hbase:namespace to be online. See inside initClusterSchemaService.<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>    // TODO: Fix this. Namespace is a pain being a sort-of system table. Fold it in to hbase:meta.<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>    // isNamespace does like isMeta and waits until namespace is onlined before allowing progress.<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>    if (!waitForNamespaceOnline()) {<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>      return;<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>    }<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>    status.setStatus("Starting cluster schema service");<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>    initClusterSchemaService();<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span><a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>    if (this.cpHost != null) {<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>      try {<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>        this.cpHost.preMasterInitialization();<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>      } catch (IOException e) {<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<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><a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>    status.markComplete("Initialization successful");<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>    LOG.info(String.format("Master has completed initialization %.3fsec",<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>       (System.currentTimeMillis() - masterActiveTime) / 1000.0f));<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    this.masterFinishedInitializationTime = System.currentTimeMillis();<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>    configurationManager.registerObserver(this.balancer);<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>    configurationManager.registerObserver(this.hfileCleaner);<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    configurationManager.registerObserver(this.logCleaner);<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>    // Set master as 'initialized'.<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    setInitialized(true);<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span><a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>    if (maintenanceMode) {<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>      LOG.info("Detected repair mode, skipping final initialization steps.");<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>      return;<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>    }<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span><a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>    status.setStatus("Assign meta replicas");<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap();<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>    metaBootstrap.assignMetaReplicas();<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>    status.setStatus("Starting quota manager");<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>    initQuotaManager();<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>      // Create the quota snapshot notifier<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>      spaceQuotaSnapshotNotifier = createQuotaSnapshotNotifier();<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>      spaceQuotaSnapshotNotifier.initialize(getClusterConnection());<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>      this.quotaObserverChore = new QuotaObserverChore(this, getMasterMetrics());<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>      // Start the chore to read the region FS space reports and act on them<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>      getChoreService().scheduleChore(quotaObserverChore);<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span><a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>      this.snapshotQuotaChore = new SnapshotQuotaObserverChore(this, getMasterMetrics());<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>      // Start the chore to read snapshots and add their usage to table/NS quotas<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>      getChoreService().scheduleChore(snapshotQuotaChore);<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>    }<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span><a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>    // clear the dead servers with same host name and port of online server because we are not<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>    // removing dead server with same hostname and port of rs which is trying to check in before<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>    // master initialization. See HBASE-5916.<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>    this.serverManager.clearDeadServersWithSameHostNameAndPortOfOnlineServer();<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span><a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>    // Check and set the znode ACLs if needed in case we are overtaking a non-secure configuration<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>    status.setStatus("Checking ZNode ACLs");<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>    zooKeeper.checkAndSetZNodeAcls();<a name="line.1166"></a>
 <span class="sourceLineNo">1167</span><a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>    status.setStatus("Calling postStartMaster coprocessors");<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    if (this.cpHost != null) {<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>      // don't let cp initialization errors kill the master<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>      try {<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>        this.cpHost.postStartMaster();<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>      } catch (IOException ioe) {<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>        LOG.error("Coprocessor postStartMaster() hook failed", ioe);<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>      }<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>    }<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span><a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>    zombieDetector.interrupt();<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span><a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>    /*<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>     * After master has started up, lets do balancer post startup initialization. Since this runs<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>     * in activeMasterManager thread, it should be fine.<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>     */<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>    long start = System.currentTimeMillis();<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    this.balancer.postMasterStartupInitialize();<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    if (LOG.isDebugEnabled()) {<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>      LOG.debug("Balancer post startup initialization complete, took " + (<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>          (System.currentTimeMillis() - start) / 1000) + " seconds");<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>   * Check hbase:meta is up and ready for reading. For use during Master startup only.<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>   * @return True if meta is UP and online and startup can progress. Otherwise, meta is not online<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>   *   and we will hold here until operator intervention.<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>   */<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>  @VisibleForTesting<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>  public boolean waitForMetaOnline() throws InterruptedException {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>    return isRegionOnline(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>  }<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>   * @return True if region is online and scannable else false if an error or shutdown (Otherwise<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>   *   we just block in here holding up all forward-progess).<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>   */<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>  private boolean isRegionOnline(RegionInfo ri) throws InterruptedException {<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>    RetryCounter rc = null;<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>    while (!isStopped()) {<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>      RegionState rs = this.assignmentManager.getRegionStates().getRegionState(ri);<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>      if (rs.isOpened()) {<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>        if (this.getServerManager().isServerOnline(rs.getServerName())) {<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>          return true;<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>        }<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>      }<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>      // Region is not OPEN.<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>      Optional&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; optProc = this.procedureExecutor.getProcedures().<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>          stream().filter(p -&gt; p instanceof ServerCrashProcedure).findAny();<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      // TODO: Add a page to refguide on how to do repair. Have this log message point to it.<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>      // Page will talk about loss of edits, how to schedule at least the meta WAL recovery, and<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>      // then how to assign including how to break region lock if one held.<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>      LOG.warn("{} is NOT online; state={}; ServerCrashProcedures={}. Master startup cannot " +<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>          "progress, in holding-pattern until region onlined.",<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>          ri.getRegionNameAsString(), rs, optProc.isPresent());<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>      // Check once-a-minute.<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>      if (rc == null) {<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>        rc = new RetryCounterFactory(1000).create();<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>      }<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>      Threads.sleep(rc.getBackoffTimeAndIncrementAttempts());<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>    }<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>    return false;<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>   * Check hbase:namespace table is assigned. If not, startup will hang looking for the ns table<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>   * (TODO: Fix this! NS should not hold-up startup).<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>   * @return True if namespace table is up/online.<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>   */<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>  @VisibleForTesting<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>  public boolean waitForNamespaceOnline() throws InterruptedException {<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>    List&lt;RegionInfo&gt; ris = this.assignmentManager.getRegionStates().<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>        getRegionsOfTable(TableName.NAMESPACE_TABLE_NAME);<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>    if (ris.isEmpty()) {<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>      // If empty, means we've not assigned the namespace table yet... Just return true so startup<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>      // continues and the namespace table gets created.<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>      return true;<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>    }<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>    // Else there are namespace regions up in meta. Ensure they are assigned before we go on.<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>    for (RegionInfo ri: ris) {<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>      isRegionOnline(ri);<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>    }<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>    return true;<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>  }<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span><a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>  /**<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>   * Adds the {@code MasterQuotasObserver} to the list of configured Master observers to<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>   * automatically remove quotas for a table when that table is deleted.<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>   */<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>  @VisibleForTesting<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>  public void updateConfigurationForQuotasObserver(Configuration conf) {<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>    // We're configured to not delete quotas on table deletion, so we don't need to add the obs.<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>    if (!conf.getBoolean(<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>          MasterQuotasObserver.REMOVE_QUOTA_ON_TABLE_DELETE,<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>          MasterQuotasObserver.REMOVE_QUOTA_ON_TABLE_DELETE_DEFAULT)) {<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>      return;<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>    }<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>    String[] masterCoprocs = conf.getStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY);<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>    final int length = null == masterCoprocs ? 0 : masterCoprocs.length;<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>    String[] updatedCoprocs = new String[length + 1];<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>    if (length &gt; 0) {<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>      System.arraycopy(masterCoprocs, 0, updatedCoprocs, 0, masterCoprocs.length);<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>    }<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>    updatedCoprocs[length] = MasterQuotasObserver.class.getName();<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>    conf.setStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, updatedCoprocs);<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>  }<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span><a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>  private void initMobCleaner() {<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>    this.expiredMobFileCleanerChore = new ExpiredMobFileCleanerChore(this);<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>    getChoreService().scheduleChore(expiredMobFileCleanerChore);<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span><a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>    int mobCompactionPeriod = conf.getInt(MobConstants.MOB_COMPACTION_CHORE_PERIOD,<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>        MobConstants.DEFAULT_MOB_COMPACTION_CHORE_PERIOD);<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>    if (mobCompactionPeriod &gt; 0) {<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>      this.mobCompactChore = new MobCompactionChore(this, mobCompactionPeriod);<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>      getChoreService().scheduleChore(mobCompactChore);<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>    } else {<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>      LOG<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>        .info("The period is " + mobCompactionPeriod + " seconds, MobCompactionChore is disabled");<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>    }<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>    this.mobCompactThread = new MasterMobCompactionThread(this);<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>  }<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span><a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>  /**<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>   * &lt;p&gt;<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>   * Create a {@link MasterMetaBootstrap} instance.<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>   * &lt;/p&gt;<a name="line.1295"></a>
+<span class="sourceLineNo">1168</span>    status.setStatus("Initializing MOB Cleaner");<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>    initMobCleaner();<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span><a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>    status.setStatus("Calling postStartMaster coprocessors");<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>    if (this.cpHost != null) {<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>      // don't let cp initialization errors kill the master<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>      try {<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>        this.cpHost.postStartMaster();<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>      } catch (IOException ioe) {<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>        LOG.error("Coprocessor postStartMaster() hook failed", ioe);<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>      }<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>    }<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span><a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>    zombieDetector.interrupt();<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>     * After master has started up, lets do balancer post startup initialization. Since this runs<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>     * in activeMasterManager thread, it should be fine.<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>     */<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>    long start = System.currentTimeMillis();<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>    this.balancer.postMasterStartupInitialize();<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>    if (LOG.isDebugEnabled()) {<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>      LOG.debug("Balancer post startup initialization complete, took " + (<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>          (System.currentTimeMillis() - start) / 1000) + " seconds");<a name="line.1191"></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><a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>  /**<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>   * Check hbase:meta is up and ready for reading. For use during Master startup only.<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>   * @return True if meta is UP and online and startup can progress. Otherwise, meta is not online<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>   *   and we will hold here until operator intervention.<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>   */<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>  @VisibleForTesting<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>  public boolean waitForMetaOnline() throws InterruptedException {<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    return isRegionOnline(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>  }<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>   * @return True if region is online and scannable else false if an error or shutdown (Otherwise<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>   *   we just block in here holding up all forward-progess).<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>   */<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>  private boolean isRegionOnline(RegionInfo ri) throws InterruptedException {<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>    RetryCounter rc = null;<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>    while (!isStopped()) {<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>      RegionState rs = this.assignmentManager.getRegionStates().getRegionState(ri);<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>      if (rs.isOpened()) {<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>        if (this.getServerManager().isServerOnline(rs.getServerName())) {<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>          return true;<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>        }<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>      }<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>      // Region is not OPEN.<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      Optional&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; optProc = this.procedureExecutor.getProcedures().<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>          stream().filter(p -&gt; p instanceof ServerCrashProcedure).findAny();<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>      // TODO: Add a page to refguide on how to do repair. Have this log message point to it.<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>      // Page will talk about loss of edits, how to schedule at least the meta WAL recovery, and<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>      // then how to assign including how to break region lock if one held.<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>      LOG.warn("{} is NOT online; state={}; ServerCrashProcedures={}. Master startup cannot " +<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>          "progress, in holding-pattern until region onlined.",<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>          ri.getRegionNameAsString(), rs, optProc.isPresent());<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>      // Check once-a-minute.<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      if (rc == null) {<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>        rc = new RetryCounterFactory(1000).create();<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>      }<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>      Threads.sleep(rc.getBackoffTimeAndIncrementAttempts());<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>    }<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>    return false;<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>  /**<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>   * Check hbase:namespace table is assigned. If not, startup will hang looking for the ns table<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>   * (TODO: Fix this! NS should not hold-up startup).<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>   * @return True if namespace table is up/online.<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>   */<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>  @VisibleForTesting<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>  public boolean waitForNamespaceOnline() throws InterruptedException {<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>    List&lt;RegionInfo&gt; ris = this.assignmentManager.getRegionStates().<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>        getRegionsOfTable(TableName.NAMESPACE_TABLE_NAME);<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>    if (ris.isEmpty()) {<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>      // If empty, means we've not assigned the namespace table yet... Just return true so startup<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>      // continues and the namespace table gets created.<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>      return true;<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>    }<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>    // Else there are namespace regions up in meta. Ensure they are assigned before we go on.<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>    for (RegionInfo ri: ris) {<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>      isRegionOnline(ri);<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>    }<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>    return true;<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>  }<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span><a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>  /**<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>   * Adds the {@code MasterQuotasObserver} to the list of configured Master observers to<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>   * automatically remove quotas for a table when that table is deleted.<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>   */<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>  @VisibleForTesting<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>  public void updateConfigurationForQuotasObserver(Configuration conf) {<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>    // We're configured to not delete quotas on table deletion, so we don't need to add the obs.<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>    if (!conf.getBoolean(<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>          MasterQuotasObserver.REMOVE_QUOTA_ON_TABLE_DELETE,<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>          MasterQuotasObserver.REMOVE_QUOTA_ON_TABLE_DELETE_DEFAULT)) {<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>      return;<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>    }<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>    String[] masterCoprocs = conf.getStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY);<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>    final int length = null == masterCoprocs ? 0 : masterCoprocs.length;<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>    String[] updatedCoprocs = new String[length + 1];<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>    if (length &gt; 0) {<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>      System.arraycopy(masterCoprocs, 0, updatedCoprocs, 0, masterCoprocs.length);<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>    }<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>    updatedCoprocs[length] = MasterQuotasObserver.class.getName();<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>    conf.setStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, updatedCoprocs);<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>  }<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span><a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>  private void initMobCleaner() {<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>    this.expiredMobFileCleanerChore = new ExpiredMobFileCleanerChore(this);<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>    getChoreService().scheduleChore(expiredMobFileCleanerChore);<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span><a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>    int mobCompactionPeriod = conf.getInt(MobConstants.MOB_COMPACTION_CHORE_PERIOD,<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>        MobConstants.DEFAULT_MOB_COMPACTION_CHORE_PERIOD);<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>    if (mobCompactionPeriod &gt; 0) {<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>      this.mobCompactChore = new MobCompactionChore(this, mobCompactionPeriod);<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>      getChoreService().scheduleChore(mobCompactChore);<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>    } else {<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>      LOG<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>        .info("The period is " + mobCompactionPeriod + " seconds, MobCompactionChore is disabled");<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>    }<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>    this.mobCompactThread = new MasterMobCompactionThread(this);<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>  /**<a name="line.1295"></a>
 <span class="sourceLineNo">1296</span>   * &lt;p&gt;<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>   * Will be overridden in tests.<a name="line.1297"></a>
+<span class="sourceLineNo">1297</span>   * Create a {@link MasterMetaBootstrap} instance.<a name="line.1297"></a>
 <span class="sourceLineNo">1298</span>   * &lt;/p&gt;<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>   */<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>  @VisibleForTesting<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>  protected MasterMetaBootstrap createMetaBootstrap() {<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>    // w/ a mocked up MasterMetaBootstrap.<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>    return new MasterMetaBootstrap(this);<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>  }<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span><a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>  /**<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>   * &lt;p&gt;<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>   * Create a {@link ServerManager} instance.<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>   * &lt;/p&gt;<a name="line.1310"></a>
+<span class="sourceLineNo">1299</span>   * &lt;p&gt;<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>   * Will be overridden in tests.<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>   * &lt;/p&gt;<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>   */<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>  @VisibleForTesting<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>  protected MasterMetaBootstrap createMetaBootstrap() {<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>    // w/ a mocked up MasterMetaBootstrap.<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>    return new MasterMetaBootstrap(this);<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>  }<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span><a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>  /**<a name="line.1310"></a>
 <span class="sourceLineNo">1311</span>   * &lt;p&gt;<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>   * Will be overridden in tests.<a name="line.1312"></a>
+<span class="sourceLineNo">1312</span>   * Create a {@link ServerManager} instance.<a name="line.1312"></a>
 <span class="sourceLineNo">1313</span>   * &lt;/p&gt;<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>   */<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>  @VisibleForTesting<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>  protected ServerManager createServerManager(final MasterServices master) throws IOException {<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>    // w/ a mocked up ServerManager.<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>    setupClusterConnection();<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>    return new ServerManager(master);<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>  }<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span><a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>  private void waitForRegionServers(final MonitoredTask status)<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>      throws IOException, InterruptedException {<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>    this.serverManager.waitForRegionServers(status);<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>  }<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span><a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>  // Will be overridden in tests<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>  @VisibleForTesting<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>  protected void initClusterSchemaService() throws IOException, InterruptedException {<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>    this.clusterSchemaService = new ClusterSchemaServiceImpl(this);<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>    this.clusterSchemaService.startAsync();<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>    try {<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>      this.clusterSchemaService.awaitRunning(getConfiguration().getInt(<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>        HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS,<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>        DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS), TimeUnit.SECONDS);<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    } catch (TimeoutException toe) {<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>      throw new IOException("Timedout starting ClusterSchemaService", toe);<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    }<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>  }<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span><a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>  private void initQuotaManager() throws IOException {<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>    MasterQuotaManager quotaManager = new MasterQuotaManager(this);<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>    quotaManager.start();<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>    this.quotaManager = quotaManager;<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>  }<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span><a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>  private SpaceQuotaSnapshotNotifier createQuotaSnapshotNotifier() {<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    SpaceQuotaSnapshotNotifier notifier =<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>        SpaceQuotaSnapshotNotifierFactory.getInstance().create(getConfiguration());<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    return notifier;<a name

<TRUNCATED>

[10/25] hbase-site git commit: Published site at 6bdaedd7ce806d3ec3d5a9a4540b544594898374.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0f0847e0/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html
index 21f7b0f..6a5ac20 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html
@@ -143,511 +143,512 @@
 <span class="sourceLineNo">135</span>    return instance;<a name="line.135"></a>
 <span class="sourceLineNo">136</span>  }<a name="line.136"></a>
 <span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>  static ChunkCreator getInstance() {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    return instance;<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>  /**<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * Creates and inits a chunk. The default implementation for a specific chunk size.<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * @return the chunk that was initialized<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   */<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  Chunk getChunk(ChunkType chunkType) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    return getChunk(CompactingMemStore.IndexType.ARRAY_MAP, chunkType);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>  /**<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * Creates and inits a chunk. The default implementation.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * @return the chunk that was initialized<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   */<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  Chunk getChunk() {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    return getChunk(CompactingMemStore.IndexType.ARRAY_MAP, ChunkType.DATA_CHUNK);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  }<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>   * Creates and inits a chunk. The default implementation for a specific index type.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * @return the chunk that was initialized<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   */<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  Chunk getChunk(CompactingMemStore.IndexType chunkIndexType) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    return getChunk(chunkIndexType, ChunkType.DATA_CHUNK);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>  /**<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   * Creates and inits a chunk with specific index type and type.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * @return the chunk that was initialized<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   */<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  Chunk getChunk(CompactingMemStore.IndexType chunkIndexType, ChunkType chunkType) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    switch (chunkType) {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      case INDEX_CHUNK:<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        if (indexChunksPool != null) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>          return getChunk(chunkIndexType, indexChunksPool.getChunkSize());<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        }<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      case DATA_CHUNK:<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        if (dataChunksPool == null) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>          return getChunk(chunkIndexType, chunkSize);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        } else {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>          return getChunk(chunkIndexType, dataChunksPool.getChunkSize());<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        }<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      default:<a name="line.182"></a>
-<span class="sourceLineNo">183</span>        throw new IllegalArgumentException(<a name="line.183"></a>
-<span class="sourceLineNo">184</span>                "chunkType must either be INDEX_CHUNK or DATA_CHUNK");<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>  }<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>  /**<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   * Creates and inits a chunk.<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * @return the chunk that was initialized<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * @param chunkIndexType whether the requested chunk is going to be used with CellChunkMap index<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * @param size the size of the chunk to be allocated, in bytes<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   */<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  Chunk getChunk(CompactingMemStore.IndexType chunkIndexType, int size) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    Chunk chunk = null;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    MemStoreChunkPool pool = null;<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // if the size is suitable for one of the pools<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    if (dataChunksPool != null &amp;&amp; size == dataChunksPool.getChunkSize()) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      pool = dataChunksPool;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    } else if (indexChunksPool != null &amp;&amp; size == indexChunksPool.getChunkSize()) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      pool = indexChunksPool;<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>    // if we have a pool<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    if (pool != null) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      //  the pool creates the chunk internally. The chunk#init() call happens here<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      chunk = pool.getChunk();<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      // the pool has run out of maxCount<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      if (chunk == null) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        if (LOG.isTraceEnabled()) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          LOG.trace("The chunk pool is full. Reached maxCount= " + pool.getMaxCount()<a name="line.212"></a>
-<span class="sourceLineNo">213</span>                  + ". Creating chunk onheap.");<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        }<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      }<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>    if (chunk == null) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      // the second parameter explains whether CellChunkMap index is requested,<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // in that case, put allocated on demand chunk mapping into chunkIdMap<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      chunk = createChunk(false, chunkIndexType, size);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>    // now we need to actually do the expensive memory allocation step in case of a new chunk,<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    // else only the offset is set to the beginning of the chunk to accept allocations<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    chunk.init();<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    return chunk;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>  }<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>  /**<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   * Creates and inits a chunk of a special size, bigger than a regular chunk size.<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   * Such a chunk will never come from pool and will always be on demand allocated.<a name="line.232"></a>
-<span class="sourceLineNo">233</span>   * @return the chunk that was initialized<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * @param jumboSize the special size to be used<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  Chunk getJumboChunk(int jumboSize) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    int allocSize = jumboSize + SIZEOF_CHUNK_HEADER;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    if (allocSize &lt;= dataChunksPool.getChunkSize()) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      LOG.warn("Jumbo chunk size " + jumboSize + " must be more than regular chunk size "<a name="line.239"></a>
-<span class="sourceLineNo">240</span>              + dataChunksPool.getChunkSize() + ". Converting to regular chunk.");<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      return getChunk(CompactingMemStore.IndexType.CHUNK_MAP);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    }<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    // the new chunk is going to hold the jumbo cell data and needs to be referenced by<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    // a strong map. Therefore the CCM index type<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    return getChunk(CompactingMemStore.IndexType.CHUNK_MAP, allocSize);<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>  /**<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   * Creates the chunk either onheap or offheap<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   * @param pool indicates if the chunks have to be created which will be used by the Pool<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * @param chunkIndexType whether the requested chunk is going to be used with CellChunkMap index<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   * @param size the size of the chunk to be allocated, in bytes<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   * @return the chunk<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  private Chunk createChunk(boolean pool, CompactingMemStore.IndexType chunkIndexType, int size) {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    Chunk chunk = null;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    int id = chunkID.getAndIncrement();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    assert id &gt; 0;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    // do not create offheap chunk on demand<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (pool &amp;&amp; this.offheap) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      chunk = new OffheapChunk(size, id, pool);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    } else {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      chunk = new OnheapChunk(size, id, pool);<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    if (pool || (chunkIndexType == CompactingMemStore.IndexType.CHUNK_MAP)) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      // put the pool chunk into the chunkIdMap so it is not GC-ed<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      this.chunkIdMap.put(chunk.getId(), chunk);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    }<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    return chunk;<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>  // Chunks from pool are created covered with strong references anyway<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  // TODO: change to CHUNK_MAP if it is generally defined<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  private Chunk createChunkForPool(CompactingMemStore.IndexType chunkIndexType, int chunkSize) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    if (chunkSize != dataChunksPool.getChunkSize() &amp;&amp;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>            chunkSize != indexChunksPool.getChunkSize()) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      return null;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    }<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    return createChunk(true, chunkIndexType, chunkSize);<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>  @VisibleForTesting<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    // Used to translate the ChunkID into a chunk ref<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  Chunk getChunk(int id) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    // can return null if chunk was never mapped<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    return chunkIdMap.get(id);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  }<a name="line.287"></a>
-<span class="sourceLineNo">288</span><a name="line.288"></a>
-<span class="sourceLineNo">289</span>  boolean isOffheap() {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    return this.offheap;<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>  private void removeChunks(Set&lt;Integer&gt; chunkIDs) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    this.chunkIdMap.keySet().removeAll(chunkIDs);<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>  Chunk removeChunk(int chunkId) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    return this.chunkIdMap.remove(chunkId);<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>  @VisibleForTesting<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    // the chunks in the chunkIdMap may already be released so we shouldn't relay<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    // on this counting for strong correctness. This method is used only in testing.<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  int numberOfMappedChunks() {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    return this.chunkIdMap.size();<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>  @VisibleForTesting<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  void clearChunkIds() {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    this.chunkIdMap.clear();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  }<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span>  /**<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * A pool of {@link Chunk} instances.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   *<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   * MemStoreChunkPool caches a number of retired chunks for reusing, it could<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   * decrease allocating bytes when writing, thereby optimizing the garbage<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * collection on JVM.<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private  class MemStoreChunkPool implements HeapMemoryTuneObserver {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    private final int chunkSize;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    private int maxCount;<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    // A queue of reclaimed chunks<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    private final BlockingQueue&lt;Chunk&gt; reclaimedChunks;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private final float poolSizePercentage;<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>    /** Statistics thread schedule pool */<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    private final ScheduledExecutorService scheduleThreadPool;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    /** Statistics thread */<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    private static final int statThreadPeriod = 60 * 5;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    private final AtomicLong chunkCount = new AtomicLong();<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    private final LongAdder reusedChunkCount = new LongAdder();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    private final String label;<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>    MemStoreChunkPool(String label, int chunkSize, int maxCount, int initialCount,<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        float poolSizePercentage) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      this.label = label;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      this.chunkSize = chunkSize;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      this.maxCount = maxCount;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.poolSizePercentage = poolSizePercentage;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.reclaimedChunks = new LinkedBlockingQueue&lt;&gt;();<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      for (int i = 0; i &lt; initialCount; i++) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        Chunk chunk = createChunk(true, CompactingMemStore.IndexType.ARRAY_MAP, chunkSize);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        chunk.init();<a name="line.345"></a>
-<span class="sourceLineNo">346</span>        reclaimedChunks.add(chunk);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      }<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      chunkCount.set(initialCount);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      final String n = Thread.currentThread().getName();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      scheduleThreadPool = Executors.newScheduledThreadPool(1, new ThreadFactoryBuilder()<a name="line.350"></a>
-<span class="sourceLineNo">351</span>              .setNameFormat(n + "-MemStoreChunkPool Statistics").setDaemon(true).build());<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      this.scheduleThreadPool.scheduleAtFixedRate(new StatisticsThread(), statThreadPeriod,<a name="line.352"></a>
-<span class="sourceLineNo">353</span>              statThreadPeriod, TimeUnit.SECONDS);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>    /**<a name="line.356"></a>
-<span class="sourceLineNo">357</span>     * Poll a chunk from the pool, reset it if not null, else create a new chunk to return if we have<a name="line.357"></a>
-<span class="sourceLineNo">358</span>     * not yet created max allowed chunks count. When we have already created max allowed chunks and<a name="line.358"></a>
-<span class="sourceLineNo">359</span>     * no free chunks as of now, return null. It is the responsibility of the caller to make a chunk<a name="line.359"></a>
-<span class="sourceLineNo">360</span>     * then.<a name="line.360"></a>
-<span class="sourceLineNo">361</span>     * Note: Chunks returned by this pool must be put back to the pool after its use.<a name="line.361"></a>
-<span class="sourceLineNo">362</span>     * @return a chunk<a name="line.362"></a>
-<span class="sourceLineNo">363</span>     * @see #putbackChunks(Chunk)<a name="line.363"></a>
-<span class="sourceLineNo">364</span>     */<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    Chunk getChunk() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      return getChunk(CompactingMemStore.IndexType.ARRAY_MAP);<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>    Chunk getChunk(CompactingMemStore.IndexType chunkIndexType) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      Chunk chunk = reclaimedChunks.poll();<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      if (chunk != null) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        chunk.reset();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        reusedChunkCount.increment();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      } else {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        // Make a chunk iff we have not yet created the maxCount chunks<a name="line.375"></a>
-<span class="sourceLineNo">376</span>        while (true) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          long created = this.chunkCount.get();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          if (created &lt; this.maxCount) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>            if (this.chunkCount.compareAndSet(created, created + 1)) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>              chunk = createChunkForPool(chunkIndexType, chunkSize);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>              break;<a name="line.381"></a>
-<span class="sourceLineNo">382</span>            }<a name="line.382"></a>
-<span class="sourceLineNo">383</span>          } else {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>            break;<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>
-<span class="sourceLineNo">387</span>      }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      return chunk;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>    int getChunkSize() {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      return chunkSize;<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>    /**<a name="line.395"></a>
-<span class="sourceLineNo">396</span>     * Add the chunks to the pool, when the pool achieves the max size, it will skip the remaining<a name="line.396"></a>
-<span class="sourceLineNo">397</span>     * chunks<a name="line.397"></a>
-<span class="sourceLineNo">398</span>     * @param c<a name="line.398"></a>
-<span class="sourceLineNo">399</span>     */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    private void putbackChunks(Chunk c) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      int toAdd = this.maxCount - reclaimedChunks.size();<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      if (c.isFromPool() &amp;&amp; c.size == chunkSize &amp;&amp; toAdd &gt; 0) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        reclaimedChunks.add(c);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      } else {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        // remove the chunk (that is not going to pool)<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        // though it is initially from the pool or not<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        ChunkCreator.this.removeChunk(c.getId());<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    }<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    private class StatisticsThread extends Thread {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      StatisticsThread() {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        super("MemStoreChunkPool.StatisticsThread");<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        setDaemon(true);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      }<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>      @Override<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      public void run() {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>        logStats();<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>      private void logStats() {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        if (!LOG.isDebugEnabled()) return;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        long created = chunkCount.get();<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        long reused = reusedChunkCount.sum();<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        long total = created + reused;<a name="line.426"></a>
-<span class="sourceLineNo">427</span>        LOG.debug("{} stats (chunk size={}): current pool size={}, created chunk count={}, " +<a name="line.427"></a>
-<span class="sourceLineNo">428</span>                "reused chunk count={}, reuseRatio={}", label, chunkSize, reclaimedChunks.size(),<a name="line.428"></a>
-<span class="sourceLineNo">429</span>            created, reused,<a name="line.429"></a>
-<span class="sourceLineNo">430</span>            (total == 0? "0": StringUtils.formatPercent((float)reused/(float)total,2)));<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    private int getMaxCount() {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      return this.maxCount;<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    @Override<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    public void onHeapMemoryTune(long newMemstoreSize, long newBlockCacheSize) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      // don't do any tuning in case of offheap memstore<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      if (isOffheap()) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        LOG.warn("{} not tuning the chunk pool as it is offheap", label);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>        return;<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      int newMaxCount =<a name="line.445"></a>
-<span class="sourceLineNo">446</span>              (int) (newMemstoreSize * poolSizePercentage / getChunkSize());<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      if (newMaxCount != this.maxCount) {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>        // We need an adjustment in the chunks numbers<a name="line.448"></a>
-<span class="sourceLineNo">449</span>        if (newMaxCount &gt; this.maxCount) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>          // Max chunks getting increased. Just change the variable. Later calls to getChunk() would<a name="line.450"></a>
-<span class="sourceLineNo">451</span>          // create and add them to Q<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          LOG.info("{} max count for chunks increased from {} to {}", this.label, this.maxCount,<a name="line.452"></a>
-<span class="sourceLineNo">453</span>              newMaxCount);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          this.maxCount = newMaxCount;<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        } else {<a name="line.455"></a>
-<span class="sourceLineNo">456</span>          // Max chunks getting decreased. We may need to clear off some of the pooled chunks now<a name="line.456"></a>
-<span class="sourceLineNo">457</span>          // itself. If the extra chunks are serving already, do not pool those when we get them back<a name="line.457"></a>
-<span class="sourceLineNo">458</span>          LOG.info("{} max count for chunks decreased from {} to {}", this.label, this.maxCount,<a name="line.458"></a>
-<span class="sourceLineNo">459</span>              newMaxCount);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          this.maxCount = newMaxCount;<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          if (this.reclaimedChunks.size() &gt; newMaxCount) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>            synchronized (this) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>              while (this.reclaimedChunks.size() &gt; newMaxCount) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>                this.reclaimedChunks.poll();<a name="line.464"></a>
-<span class="sourceLineNo">465</span>              }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>            }<a name="line.466"></a>
-<span class="sourceLineNo">467</span>          }<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        }<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>  }<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>  @VisibleForTesting<a name="line.473"></a>
-<span class="sourceLineNo">474</span>  static void clearDisableFlag() {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    chunkPoolDisabled = false;<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  private MemStoreChunkPool initializePool(String label, long globalMemStoreSize,<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      float poolSizePercentage, float initialCountPercentage, int chunkSize,<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      HeapMemoryManager heapMemoryManager) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    if (poolSizePercentage &lt;= 0) {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      LOG.info("{} poolSizePercentage is less than 0. So not using pool", label);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      return null;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    if (chunkPoolDisabled) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      return null;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    if (poolSizePercentage &gt; 1.0) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      throw new IllegalArgumentException(<a name="line.489"></a>
-<span class="sourceLineNo">490</span>              MemStoreLAB.CHUNK_POOL_MAXSIZE_KEY + " must be between 0.0 and 1.0");<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    int maxCount = (int) (globalMemStoreSize * poolSizePercentage / chunkSize);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    if (initialCountPercentage &gt; 1.0 || initialCountPercentage &lt; 0) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      throw new IllegalArgumentException(label + " " + MemStoreLAB.CHUNK_POOL_INITIALSIZE_KEY +<a name="line.494"></a>
-<span class="sourceLineNo">495</span>          " must be between 0.0 and 1.0");<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    }<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    int initialCount = (int) (initialCountPercentage * maxCount);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    LOG.info("Allocating {} MemStoreChunkPool with chunk size {}, max count {}, initial count {}",<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        label, StringUtils.byteDesc(chunkSize), maxCount, initialCount);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    MemStoreChunkPool memStoreChunkPool = new MemStoreChunkPool(label, chunkSize, maxCount,<a name="line.500"></a>
-<span class="sourceLineNo">501</span>            initialCount, poolSizePercentage);<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    if (heapMemoryManager != null &amp;&amp; memStoreChunkPool != null) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      // Register with Heap Memory manager<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      heapMemoryManager.registerTuneObserver(memStoreChunkPool);<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    return memStoreChunkPool;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>  }<a name="line.507"></a>
-<span class="sourceLineNo">508</span><a name="line.508"></a>
-<span class="sourceLineNo">509</span>  @VisibleForTesting<a name="line.509"></a>
-<span class="sourceLineNo">510</span>  int getMaxCount() {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    return getMaxCount(ChunkType.DATA_CHUNK);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>  }<a name="line.512"></a>
-<span class="sourceLineNo">513</span><a name="line.513"></a>
-<span class="sourceLineNo">514</span>  @VisibleForTesting<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  int getMaxCount(ChunkType chunkType) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    switch (chunkType) {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      case INDEX_CHUNK:<a name="line.517"></a>
-<span class="sourceLineNo">518</span>        if (indexChunksPool != null) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          return indexChunksPool.getMaxCount();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        }<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        break;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      case DATA_CHUNK:<a name="line.522"></a>
-<span class="sourceLineNo">523</span>        if (dataChunksPool != null) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          return dataChunksPool.getMaxCount();<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>        break;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      default:<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        throw new IllegalArgumentException(<a name="line.528"></a>
-<span class="sourceLineNo">529</span>                "chunkType must either be INDEX_CHUNK or DATA_CHUNK");<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    return 0;<a name="line.532"></a>
-<span class="sourceLineNo">533</span>  }<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>  @VisibleForTesting<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  int getPoolSize() {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    return getPoolSize(ChunkType.DATA_CHUNK);<a name="line.537"></a>
-<span class="sourceLineNo">538</span>  }<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>  @VisibleForTesting<a name="line.540"></a>
-<span class="sourceLineNo">541</span>  int getPoolSize(ChunkType chunkType) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    switch (chunkType) {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      case INDEX_CHUNK:<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        if (indexChunksPool != null) {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>          return indexChunksPool.reclaimedChunks.size();<a name="line.545"></a>
-<span class="sourceLineNo">546</span>        }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>        break;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      case DATA_CHUNK:<a name="line.548"></a>
-<span class="sourceLineNo">549</span>        if (dataChunksPool != null) {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>          return dataChunksPool.reclaimedChunks.size();<a name="line.550"></a>
-<span class="sourceLineNo">551</span>        }<a name="line.551"></a>
-<span class="sourceLineNo">552</span>        break;<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      default:<a name="line.553"></a>
-<span class="sourceLineNo">554</span>        throw new IllegalArgumentException(<a name="line.554"></a>
-<span class="sourceLineNo">555</span>                "chunkType must either be INDEX_CHUNK or DATA_CHUNK");<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    }<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    return 0;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>  @VisibleForTesting<a name="line.560"></a>
-<span class="sourceLineNo">561</span>  boolean isChunkInPool(int chunkId) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    Chunk c = getChunk(chunkId);<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    if (c==null) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      return false;<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    }<a name="line.565"></a>
-<span class="sourceLineNo">566</span><a name="line.566"></a>
-<span class="sourceLineNo">567</span>    // chunks that are from pool will return true chunk reference not null<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    if (dataChunksPool != null &amp;&amp; dataChunksPool.reclaimedChunks.contains(c)) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      return true;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    } else if (indexChunksPool != null &amp;&amp; indexChunksPool.reclaimedChunks.contains(c)) {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      return true;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    }<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    return false;<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  }<a name="line.574"></a>
-<span class="sourceLineNo">575</span><a name="line.575"></a>
-<span class="sourceLineNo">576</span>  /*<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   * Only used in testing<a name="line.577"></a>
-<span class="sourceLineNo">578</span>   */<a name="line.578"></a>
-<span class="sourceLineNo">579</span>  @VisibleForTesting<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  void clearChunksInPool() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    if (dataChunksPool != null) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      dataChunksPool.reclaimedChunks.clear();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    }<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    if (indexChunksPool != null) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      indexChunksPool.reclaimedChunks.clear();<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    }<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  }<a name="line.587"></a>
-<span class="sourceLineNo">588</span><a name="line.588"></a>
-<span class="sourceLineNo">589</span>  int getChunkSize() {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    return getChunkSize(ChunkType.DATA_CHUNK);<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  }<a name="line.591"></a>
-<span class="sourceLineNo">592</span><a name="line.592"></a>
-<span class="sourceLineNo">593</span>  int getChunkSize(ChunkType chunkType) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    switch (chunkType) {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      case INDEX_CHUNK:<a name="line.595"></a>
-<span class="sourceLineNo">596</span>        if (indexChunksPool != null) {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>          return indexChunksPool.getChunkSize();<a name="line.597"></a>
-<span class="sourceLineNo">598</span>        }<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      case DATA_CHUNK:<a name="line.599"></a>
-<span class="sourceLineNo">600</span>        if (dataChunksPool != null) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>          return dataChunksPool.getChunkSize();<a name="line.601"></a>
-<span class="sourceLineNo">602</span>        } else { // When pools are empty<a name="line.602"></a>
-<span class="sourceLineNo">603</span>          return chunkSize;<a name="line.603"></a>
-<span class="sourceLineNo">604</span>        }<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      default:<a name="line.605"></a>
-<span class="sourceLineNo">606</span>        throw new IllegalArgumentException(<a name="line.606"></a>
-<span class="sourceLineNo">607</span>                "chunkType must either be INDEX_CHUNK or DATA_CHUNK");<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>  }<a name="line.609"></a>
-<span class="sourceLineNo">610</span><a name="line.610"></a>
-<span class="sourceLineNo">611</span>  synchronized void putbackChunks(Set&lt;Integer&gt; chunks) {<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    // if there is no pool just try to clear the chunkIdMap in case there is something<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    if (dataChunksPool == null &amp;&amp; indexChunksPool == null) {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      this.removeChunks(chunks);<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      return;<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    }<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>    // if there is a pool, go over all chunk IDs that came back, the chunks may be from pool or not<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    for (int chunkID : chunks) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      // translate chunk ID to chunk, if chunk initially wasn't in pool<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      // this translation will (most likely) return null<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      Chunk chunk = ChunkCreator.this.getChunk(chunkID);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      if (chunk != null) {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>        if (chunk.isFromPool() &amp;&amp; chunk.isIndexChunk()) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>          indexChunksPool.putbackChunks(chunk);<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        } else if (chunk.isFromPool() &amp;&amp; chunk.size == dataChunksPool.getChunkSize()) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>          dataChunksPool.putbackChunks(chunk);<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        } else {<a name="line.628"></a>
-<span class="sourceLineNo">629</span>          // chunks which are not from one of the pools<a name="line.629"></a>
-<span class="sourceLineNo">630</span>          // should be released without going to the pools.<a name="line.630"></a>
-<span class="sourceLineNo">631</span>          // Removing them from chunkIdMap will cause their removal by the GC.<a name="line.631"></a>
-<span class="sourceLineNo">632</span>          this.removeChunk(chunkID);<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      }<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      // if chunk is null, it was never covered by the chunkIdMap (and so wasn't in pool also),<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      // so we have nothing to do on its release<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    }<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    return;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>  }<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span>}<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
+<span class="sourceLineNo">138</span>  @VisibleForTesting<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  public static ChunkCreator getInstance() {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    return instance;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  }<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>  /**<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * Creates and inits a chunk. The default implementation for a specific chunk size.<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * @return the chunk that was initialized<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   */<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  Chunk getChunk(ChunkType chunkType) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    return getChunk(CompactingMemStore.IndexType.ARRAY_MAP, chunkType);<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  }<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>  /**<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * Creates and inits a chunk. The default implementation.<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * @return the chunk that was initialized<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  Chunk getChunk() {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    return getChunk(CompactingMemStore.IndexType.ARRAY_MAP, ChunkType.DATA_CHUNK);<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>  /**<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * Creates and inits a chunk. The default implementation for a specific index type.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * @return the chunk that was initialized<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   */<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  Chunk getChunk(CompactingMemStore.IndexType chunkIndexType) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    return getChunk(chunkIndexType, ChunkType.DATA_CHUNK);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>  /**<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * Creates and inits a chunk with specific index type and type.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * @return the chunk that was initialized<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   */<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  Chunk getChunk(CompactingMemStore.IndexType chunkIndexType, ChunkType chunkType) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    switch (chunkType) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      case INDEX_CHUNK:<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        if (indexChunksPool != null) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>          return getChunk(chunkIndexType, indexChunksPool.getChunkSize());<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        }<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      case DATA_CHUNK:<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        if (dataChunksPool == null) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          return getChunk(chunkIndexType, chunkSize);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        } else {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>          return getChunk(chunkIndexType, dataChunksPool.getChunkSize());<a name="line.181"></a>
+<span class="sourceLineNo">182</span>        }<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      default:<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        throw new IllegalArgumentException(<a name="line.184"></a>
+<span class="sourceLineNo">185</span>                "chunkType must either be INDEX_CHUNK or DATA_CHUNK");<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>
+<span class="sourceLineNo">189</span>  /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * Creates and inits a chunk.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * @return the chunk that was initialized<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   * @param chunkIndexType whether the requested chunk is going to be used with CellChunkMap index<a name="line.192"></a>
+<span class="sourceLineNo">193</span>   * @param size the size of the chunk to be allocated, in bytes<a name="line.193"></a>
+<span class="sourceLineNo">194</span>   */<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  Chunk getChunk(CompactingMemStore.IndexType chunkIndexType, int size) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    Chunk chunk = null;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    MemStoreChunkPool pool = null;<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>    // if the size is suitable for one of the pools<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    if (dataChunksPool != null &amp;&amp; size == dataChunksPool.getChunkSize()) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      pool = dataChunksPool;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    } else if (indexChunksPool != null &amp;&amp; size == indexChunksPool.getChunkSize()) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      pool = indexChunksPool;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>    // if we have a pool<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    if (pool != null) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      //  the pool creates the chunk internally. The chunk#init() call happens here<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      chunk = pool.getChunk();<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      // the pool has run out of maxCount<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      if (chunk == null) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        if (LOG.isTraceEnabled()) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>          LOG.trace("The chunk pool is full. Reached maxCount= " + pool.getMaxCount()<a name="line.213"></a>
+<span class="sourceLineNo">214</span>                  + ". Creating chunk onheap.");<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        }<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><a name="line.218"></a>
+<span class="sourceLineNo">219</span>    if (chunk == null) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      // the second parameter explains whether CellChunkMap index is requested,<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      // in that case, put allocated on demand chunk mapping into chunkIdMap<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      chunk = createChunk(false, chunkIndexType, size);<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>    // now we need to actually do the expensive memory allocation step in case of a new chunk,<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    // else only the offset is set to the beginning of the chunk to accept allocations<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    chunk.init();<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    return chunk;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>  /**<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * Creates and inits a chunk of a special size, bigger than a regular chunk size.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * Such a chunk will never come from pool and will always be on demand allocated.<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   * @return the chunk that was initialized<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   * @param jumboSize the special size to be used<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  Chunk getJumboChunk(int jumboSize) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    int allocSize = jumboSize + SIZEOF_CHUNK_HEADER;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    if (allocSize &lt;= dataChunksPool.getChunkSize()) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      LOG.warn("Jumbo chunk size " + jumboSize + " must be more than regular chunk size "<a name="line.240"></a>
+<span class="sourceLineNo">241</span>              + dataChunksPool.getChunkSize() + ". Converting to regular chunk.");<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      return getChunk(CompactingMemStore.IndexType.CHUNK_MAP);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    }<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    // the new chunk is going to hold the jumbo cell data and needs to be referenced by<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    // a strong map. Therefore the CCM index type<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    return getChunk(CompactingMemStore.IndexType.CHUNK_MAP, allocSize);<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>  /**<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * Creates the chunk either onheap or offheap<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   * @param pool indicates if the chunks have to be created which will be used by the Pool<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   * @param chunkIndexType whether the requested chunk is going to be used with CellChunkMap index<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   * @param size the size of the chunk to be allocated, in bytes<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * @return the chunk<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   */<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  private Chunk createChunk(boolean pool, CompactingMemStore.IndexType chunkIndexType, int size) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    Chunk chunk = null;<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    int id = chunkID.getAndIncrement();<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    assert id &gt; 0;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    // do not create offheap chunk on demand<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    if (pool &amp;&amp; this.offheap) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      chunk = new OffheapChunk(size, id, pool);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    } else {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      chunk = new OnheapChunk(size, id, pool);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    if (pool || (chunkIndexType == CompactingMemStore.IndexType.CHUNK_MAP)) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      // put the pool chunk into the chunkIdMap so it is not GC-ed<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      this.chunkIdMap.put(chunk.getId(), chunk);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    }<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    return chunk;<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>  // Chunks from pool are created covered with strong references anyway<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  // TODO: change to CHUNK_MAP if it is generally defined<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  private Chunk createChunkForPool(CompactingMemStore.IndexType chunkIndexType, int chunkSize) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    if (chunkSize != dataChunksPool.getChunkSize() &amp;&amp;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>            chunkSize != indexChunksPool.getChunkSize()) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      return null;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    return createChunk(true, chunkIndexType, chunkSize);<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>  @VisibleForTesting<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    // Used to translate the ChunkID into a chunk ref<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  Chunk getChunk(int id) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    // can return null if chunk was never mapped<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    return chunkIdMap.get(id);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>  }<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>  boolean isOffheap() {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    return this.offheap;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>  }<a name="line.292"></a>
+<span class="sourceLineNo">293</span><a name="line.293"></a>
+<span class="sourceLineNo">294</span>  private void removeChunks(Set&lt;Integer&gt; chunkIDs) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    this.chunkIdMap.keySet().removeAll(chunkIDs);<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>  Chunk removeChunk(int chunkId) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    return this.chunkIdMap.remove(chunkId);<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>  @VisibleForTesting<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    // the chunks in the chunkIdMap may already be released so we shouldn't relay<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    // on this counting for strong correctness. This method is used only in testing.<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  int numberOfMappedChunks() {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    return this.chunkIdMap.size();<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  }<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span>  @VisibleForTesting<a name="line.309"></a>
+<span class="sourceLineNo">310</span>  void clearChunkIds() {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    this.chunkIdMap.clear();<a name="line.311"></a>
+<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * A pool of {@link Chunk} instances.<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   *<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * MemStoreChunkPool caches a number of retired chunks for reusing, it could<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * decrease allocating bytes when writing, thereby optimizing the garbage<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   * collection on JVM.<a name="line.319"></a>
+<span class="sourceLineNo">320</span>   */<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  private  class MemStoreChunkPool implements HeapMemoryTuneObserver {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    private final int chunkSize;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    private int maxCount;<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    // A queue of reclaimed chunks<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    private final BlockingQueue&lt;Chunk&gt; reclaimedChunks;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    private final float poolSizePercentage;<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>    /** Statistics thread schedule pool */<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    private final ScheduledExecutorService scheduleThreadPool;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    /** Statistics thread */<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    private static final int statThreadPeriod = 60 * 5;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    private final AtomicLong chunkCount = new AtomicLong();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    private final LongAdder reusedChunkCount = new LongAdder();<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    private final String label;<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>    MemStoreChunkPool(String label, int chunkSize, int maxCount, int initialCount,<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        float poolSizePercentage) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      this.label = label;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      this.chunkSize = chunkSize;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      this.maxCount = maxCount;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      this.poolSizePercentage = poolSizePercentage;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.reclaimedChunks = new LinkedBlockingQueue&lt;&gt;();<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      for (int i = 0; i &lt; initialCount; i++) {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        Chunk chunk = createChunk(true, CompactingMemStore.IndexType.ARRAY_MAP, chunkSize);<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        chunk.init();<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        reclaimedChunks.add(chunk);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      }<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      chunkCount.set(initialCount);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      final String n = Thread.currentThread().getName();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      scheduleThreadPool = Executors.newScheduledThreadPool(1, new ThreadFactoryBuilder()<a name="line.351"></a>
+<span class="sourceLineNo">352</span>              .setNameFormat(n + "-MemStoreChunkPool Statistics").setDaemon(true).build());<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      this.scheduleThreadPool.scheduleAtFixedRate(new StatisticsThread(), statThreadPeriod,<a name="line.353"></a>
+<span class="sourceLineNo">354</span>              statThreadPeriod, TimeUnit.SECONDS);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    }<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span>     * Poll a chunk from the pool, reset it if not null, else create a new chunk to return if we have<a name="line.358"></a>
+<span class="sourceLineNo">359</span>     * not yet created max allowed chunks count. When we have already created max allowed chunks and<a name="line.359"></a>
+<span class="sourceLineNo">360</span>     * no free chunks as of now, return null. It is the responsibility of the caller to make a chunk<a name="line.360"></a>
+<span class="sourceLineNo">361</span>     * then.<a name="line.361"></a>
+<span class="sourceLineNo">362</span>     * Note: Chunks returned by this pool must be put back to the pool after its use.<a name="line.362"></a>
+<span class="sourceLineNo">363</span>     * @return a chunk<a name="line.363"></a>
+<span class="sourceLineNo">364</span>     * @see #putbackChunks(Chunk)<a name="line.364"></a>
+<span class="sourceLineNo">365</span>     */<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    Chunk getChunk() {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      return getChunk(CompactingMemStore.IndexType.ARRAY_MAP);<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>    Chunk getChunk(CompactingMemStore.IndexType chunkIndexType) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      Chunk chunk = reclaimedChunks.poll();<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      if (chunk != null) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        chunk.reset();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        reusedChunkCount.increment();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      } else {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        // Make a chunk iff we have not yet created the maxCount chunks<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        while (true) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>          long created = this.chunkCount.get();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>          if (created &lt; this.maxCount) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>            if (this.chunkCount.compareAndSet(created, created + 1)) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>              chunk = createChunkForPool(chunkIndexType, chunkSize);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>              break;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>            }<a name="line.383"></a>
+<span class="sourceLineNo">384</span>          } else {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>            break;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>          }<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>      return chunk;<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>    int getChunkSize() {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      return chunkSize;<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>    /**<a name="line.396"></a>
+<span class="sourceLineNo">397</span>     * Add the chunks to the pool, when the pool achieves the max size, it will skip the remaining<a name="line.397"></a>
+<span class="sourceLineNo">398</span>     * chunks<a name="line.398"></a>
+<span class="sourceLineNo">399</span>     * @param c<a name="line.399"></a>
+<span class="sourceLineNo">400</span>     */<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    private void putbackChunks(Chunk c) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      int toAdd = this.maxCount - reclaimedChunks.size();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      if (c.isFromPool() &amp;&amp; c.size == chunkSize &amp;&amp; toAdd &gt; 0) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        reclaimedChunks.add(c);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      } else {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        // remove the chunk (that is not going to pool)<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        // though it is initially from the pool or not<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        ChunkCreator.this.removeChunk(c.getId());<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      }<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    }<a name="line.410"></a>
+<span class="sourceLineNo">411</span><a name="line.411"></a>
+<span class="sourceLineNo">412</span>    private class StatisticsThread extends Thread {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      StatisticsThread() {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        super("MemStoreChunkPool.StatisticsThread");<a name="line.414"></a>
+<span class="sourceLineNo">415</span>        setDaemon(true);<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      }<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span>      @Override<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      public void run() {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        logStats();<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      }<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>      private void logStats() {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        if (!LOG.isDebugEnabled()) return;<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        long created = chunkCount.get();<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        long reused = reusedChunkCount.sum();<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        long total = created + reused;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        LOG.debug("{} stats (chunk size={}): current pool size={}, created chunk count={}, " +<a name="line.428"></a>
+<span class="sourceLineNo">429</span>                "reused chunk count={}, reuseRatio={}", label, chunkSize, reclaimedChunks.size(),<a name="line.429"></a>
+<span class="sourceLineNo">430</span>            created, reused,<a name="line.430"></a>
+<span class="sourceLineNo">431</span>            (total == 0? "0": StringUtils.formatPercent((float)reused/(float)total,2)));<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>    private int getMaxCount() {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      return this.maxCount;<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    }<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>    @Override<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    public void onHeapMemoryTune(long newMemstoreSize, long newBlockCacheSize) {<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      // don't do any tuning in case of offheap memstore<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      if (isOffheap()) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        LOG.warn("{} not tuning the chunk pool as it is offheap", label);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>        return;<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      }<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      int newMaxCount =<a name="line.446"></a>
+<span class="sourceLineNo">447</span>              (int) (newMemstoreSize * poolSizePercentage / getChunkSize());<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      if (newMaxCount != this.maxCount) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>        // We need an adjustment in the chunks numbers<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        if (newMaxCount &gt; this.maxCount) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>          // Max chunks getting increased. Just change the variable. Later calls to getChunk() would<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          // create and add them to Q<a name="line.452"></a>
+<span class="sourceLineNo">453</span>          LOG.info("{} max count for chunks increased from {} to {}", this.label, this.maxCount,<a name="line.453"></a>
+<span class="sourceLineNo">454</span>              newMaxCount);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          this.maxCount = newMaxCount;<a name="line.455"></a>
+<span class="sourceLineNo">456</span>        } else {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          // Max chunks getting decreased. We may need to clear off some of the pooled chunks now<a name="line.457"></a>
+<span class="sourceLineNo">458</span>          // itself. If the extra chunks are serving already, do not pool those when we get them back<a name="line.458"></a>
+<span class="sourceLineNo">459</span>          LOG.info("{} max count for chunks decreased from {} to {}", this.label, this.maxCount,<a name="line.459"></a>
+<span class="sourceLineNo">460</span>              newMaxCount);<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          this.maxCount = newMaxCount;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>          if (this.reclaimedChunks.size() &gt; newMaxCount) {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>            synchronized (this) {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>              while (this.reclaimedChunks.size() &gt; newMaxCount) {<a name="line.464"></a>
+<span class="sourceLineNo">465</span>                this.reclaimedChunks.poll();<a name="line.465"></a>
+<span class="sourceLineNo">466</span>              }<a name="line.466"></a>
+<span class="sourceLineNo">467</span>            }<a name="line.467"></a>
+<span class="sourceLineNo">468</span>          }<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>    }<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  }<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span>  @VisibleForTesting<a name="line.474"></a>
+<span class="sourceLineNo">475</span>  static void clearDisableFlag() {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    chunkPoolDisabled = false;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  private MemStoreChunkPool initializePool(String label, long globalMemStoreSize,<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      float poolSizePercentage, float initialCountPercentage, int chunkSize,<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      HeapMemoryManager heapMemoryManager) {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    if (poolSizePercentage &lt;= 0) {<a name="line.482"></a>
+<span class="sourceLineNo">483</span>      LOG.info("{} poolSizePercentage is less than 0. So not using pool", label);<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      return null;<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    }<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    if (chunkPoolDisabled) {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      return null;<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    }<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    if (poolSizePercentage &gt; 1.0) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      throw new IllegalArgumentException(<a name="line.490"></a>
+<span class="sourceLineNo">491</span>              MemStoreLAB.CHUNK_POOL_MAXSIZE_KEY + " must be between 0.0 and 1.0");<a name="line.491"></a>
+<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    int maxCount = (int) (globalMemStoreSize * poolSizePercentage / chunkSize);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    if (initialCountPercentage &gt; 1.0 || initialCountPercentage &lt; 0) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      throw new IllegalArgumentException(label + " " + MemStoreLAB.CHUNK_POOL_INITIALSIZE_KEY +<a name="line.495"></a>
+<span class="sourceLineNo">496</span>          " must be between 0.0 and 1.0");<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    int initialCount = (int) (initialCountPercentage * maxCount);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    LOG.info("Allocating {} MemStoreChunkPool with chunk size {}, max count {}, initial count {}",<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        label, StringUtils.byteDesc(chunkSize), maxCount, initialCount);<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    MemStoreChunkPool memStoreChunkPool = new MemStoreChunkPool(label, chunkSize, maxCount,<a name="line.501"></a>
+<span class="sourceLineNo">502</span>            initialCount, poolSizePercentage);<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    if (heapMemoryManager != null &amp;&amp; memStoreChunkPool != null) {<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      // Register with Heap Memory manager<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      heapMemoryManager.registerTuneObserver(memStoreChunkPool);<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    return memStoreChunkPool;<a name="line.507"></a>
+<span class="sourceLineNo">508</span>  }<a name="line.508"></a>
+<span class="sourceLineNo">509</span><a name="line.509"></a>
+<span class="sourceLineNo">510</span>  @VisibleForTesting<a name="line.510"></a>
+<span class="sourceLineNo">511</span>  int getMaxCount() {<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    return getMaxCount(ChunkType.DATA_CHUNK);<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>  @VisibleForTesting<a name="line.515"></a>
+<span class="sourceLineNo">516</span>  int getMaxCount(ChunkType chunkType) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    switch (chunkType) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      case INDEX_CHUNK:<a name="line.518"></a>
+<span class="sourceLineNo">519</span>        if (indexChunksPool != null) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>          return indexChunksPool.getMaxCount();<a name="line.520"></a>
+<span class="sourceLineNo">521</span>        }<a name="line.521"></a>
+<span class="sourceLineNo">522</span>        break;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      case DATA_CHUNK:<a name="line.523"></a>
+<span class="sourceLineNo">524</span>        if (dataChunksPool != null) {<a name="line.524"></a>
+<span class="sourceLineNo">525</span>          return dataChunksPool.getMaxCount();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>        }<a name="line.526"></a>
+<span class="sourceLineNo">527</span>        break;<a name="line.527"></a>
+<span class="sourceLineNo">528</span>      default:<a name="line.528"></a>
+<span class="sourceLineNo">529</span>        throw new IllegalArgumentException(<a name="line.529"></a>
+<span class="sourceLineNo">530</span>                "chunkType must either be INDEX_CHUNK or DATA_CHUNK");<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    return 0;<a name="line.533"></a>
+<span class="sourceLineNo">534</span>  }<a name="line.534"></a>
+<span class="sourceLineNo">535</span><a name="line.535"></a>
+<span class="sourceLineNo">536</span>  @VisibleForTesting<a name="line.536"></a>
+<span class="sourceLineNo">537</span>  int getPoolSize() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    return getPoolSize(ChunkType.DATA_CHUNK);<a name="line.538"></a>
+<span class="sourceLineNo">539</span>  }<a name="line.539"></a>
+<span class="sourceLineNo">540</span><a name="line.540"></a>
+<span class="sourceLineNo">541</span>  @VisibleForTesting<a name="line.541"></a>
+<span class="sourceLineNo">542</span>  int getPoolSize(ChunkType chunkType) {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    switch (chunkType) {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      case INDEX_CHUNK:<a name="line.544"></a>
+<span class="sourceLineNo">545</span>        if (indexChunksPool != null) {<a name="line.545"></a>
+<span class="sourceLineNo">546</span>          return indexChunksPool.reclaimedChunks.size();<a name="line.546"></a>
+<span class="sourceLineNo">547</span>        }<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        break;<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      case DATA_CHUNK:<a name="line.549"></a>
+<span class="sourceLineNo">550</span>        if (dataChunksPool != null) {<a name="line.550"></a>
+<span class="sourceLineNo">551</span>          return dataChunksPool.reclaimedChunks.size();<a name="line.551"></a>
+<span class="sourceLineNo">552</span>        }<a name="line.552"></a>
+<span class="sourceLineNo">553</span>        break;<a name="line.553"></a>
+<span class="sourceLineNo">554</span>      default:<a name="line.554"></a>
+<span class="sourceLineNo">555</

<TRUNCATED>