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/08/13 14:49:34 UTC

[01/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site 69bf677f9 -> 75e49c45b


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/testdevapidocs/src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html
index 0c70521..31e87d3 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html
@@ -49,369 +49,478 @@
 <span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.41"></a>
 <span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.42"></a>
 <span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.junit.BeforeClass;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.junit.ClassRule;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.junit.Rule;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.junit.Test;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.junit.experimental.categories.Category;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.junit.rules.TestName;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.mockito.Mockito;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.slf4j.Logger;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.slf4j.LoggerFactory;<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsSplitOrMergeEnabledResponse;<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>/**<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * Tests logic of {@link SimpleRegionNormalizer}.<a name="line.59"></a>
-<span class="sourceLineNo">060</span> */<a name="line.60"></a>
-<span class="sourceLineNo">061</span>@Category({MasterTests.class, SmallTests.class})<a name="line.61"></a>
-<span class="sourceLineNo">062</span>public class TestSimpleRegionNormalizer {<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>  @ClassRule<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.65"></a>
-<span class="sourceLineNo">066</span>      HBaseClassTestRule.forClass(TestSimpleRegionNormalizer.class);<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>  private static final Logger LOG = LoggerFactory.getLogger(TestSimpleRegionNormalizer.class);<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private static RegionNormalizer normalizer;<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  // mocks<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private static MasterServices masterServices;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private static MasterRpcServices masterRpcServices;<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>  @Rule<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  public TestName name = new TestName();<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  @BeforeClass<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  public static void beforeAllTests() throws Exception {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    normalizer = new SimpleRegionNormalizer();<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  @Test<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  public void testPlanComparator() {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    Comparator&lt;NormalizationPlan&gt; comparator = new SimpleRegionNormalizer.PlanComparator();<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    NormalizationPlan splitPlan1 = new SplitNormalizationPlan(null, null);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    NormalizationPlan splitPlan2 = new SplitNormalizationPlan(null, null);<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    NormalizationPlan mergePlan1 = new MergeNormalizationPlan(null, null);<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    NormalizationPlan mergePlan2 = new MergeNormalizationPlan(null, null);<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>    assertTrue(comparator.compare(splitPlan1, splitPlan2) == 0);<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    assertTrue(comparator.compare(splitPlan2, splitPlan1) == 0);<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    assertTrue(comparator.compare(mergePlan1, mergePlan2) == 0);<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    assertTrue(comparator.compare(mergePlan2, mergePlan1) == 0);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    assertTrue(comparator.compare(splitPlan1, mergePlan1) &lt; 0);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    assertTrue(comparator.compare(mergePlan1, splitPlan1) &gt; 0);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  }<a name="line.98"></a>
-<span class="sourceLineNo">099</span><a name="line.99"></a>
-<span class="sourceLineNo">100</span>  @Test<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  public void testNoNormalizationForMetaTable() throws HBaseIOException {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    TableName testTable = TableName.META_TABLE_NAME;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    List&lt;RegionInfo&gt; RegionInfo = new ArrayList&lt;&gt;();<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    Map&lt;byte[], Integer&gt; regionSizes = new HashMap&lt;&gt;();<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>    setupMocksForNormalizer(regionSizes, RegionInfo);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    List&lt;NormalizationPlan&gt; plans = normalizer.computePlanForTable(testTable);<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    assertTrue(plans == null);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  @Test<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  public void testNoNormalizationIfTooFewRegions() throws HBaseIOException {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    List&lt;RegionInfo&gt; RegionInfo = new ArrayList&lt;&gt;();<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    Map&lt;byte[], Integer&gt; regionSizes = new HashMap&lt;&gt;();<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    RegionInfo hri1 = RegionInfoBuilder.newBuilder(tableName)<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        .setStartKey(Bytes.toBytes("aaa"))<a name="line.117"></a>
-<span class="sourceLineNo">118</span>        .setEndKey(Bytes.toBytes("bbb"))<a name="line.118"></a>
-<span class="sourceLineNo">119</span>        .build();<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    RegionInfo.add(hri1);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    regionSizes.put(hri1.getRegionName(), 10);<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>    RegionInfo hri2 = RegionInfoBuilder.newBuilder(tableName)<a name="line.123"></a>
-<span class="sourceLineNo">124</span>        .setStartKey(Bytes.toBytes("bbb"))<a name="line.124"></a>
-<span class="sourceLineNo">125</span>        .setEndKey(Bytes.toBytes("ccc"))<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        .build();<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    RegionInfo.add(hri2);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    regionSizes.put(hri2.getRegionName(), 15);<a name="line.128"></a>
-<span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>    setupMocksForNormalizer(regionSizes, RegionInfo);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    List&lt;NormalizationPlan&gt; plans = normalizer.computePlanForTable(tableName);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    assertTrue(plans == null);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  }<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>  @Test<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  public void testNoNormalizationOnNormalizedCluster() throws HBaseIOException {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    List&lt;RegionInfo&gt; RegionInfo = new ArrayList&lt;&gt;();<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    Map&lt;byte[], Integer&gt; regionSizes = new HashMap&lt;&gt;();<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>    RegionInfo hri1 = RegionInfoBuilder.newBuilder(tableName)<a name="line.141"></a>
-<span class="sourceLineNo">142</span>        .setStartKey(Bytes.toBytes("aaa"))<a name="line.142"></a>
-<span class="sourceLineNo">143</span>        .setEndKey(Bytes.toBytes("bbb"))<a name="line.143"></a>
-<span class="sourceLineNo">144</span>        .build();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    RegionInfo.add(hri1);<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    regionSizes.put(hri1.getRegionName(), 10);<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>    RegionInfo hri2 = RegionInfoBuilder.newBuilder(tableName)<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        .setStartKey(Bytes.toBytes("bbb"))<a name="line.149"></a>
-<span class="sourceLineNo">150</span>        .setEndKey(Bytes.toBytes("ccc"))<a name="line.150"></a>
-<span class="sourceLineNo">151</span>        .build();<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    RegionInfo.add(hri2);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    regionSizes.put(hri2.getRegionName(), 15);<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    RegionInfo hri3 = RegionInfoBuilder.newBuilder(tableName)<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        .setStartKey(Bytes.toBytes("ccc"))<a name="line.156"></a>
-<span class="sourceLineNo">157</span>        .setEndKey(Bytes.toBytes("ddd"))<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        .build();<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    RegionInfo.add(hri3);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    regionSizes.put(hri3.getRegionName(), 8);<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>    RegionInfo hri4 = RegionInfoBuilder.newBuilder(tableName)<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        .setStartKey(Bytes.toBytes("ddd"))<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        .setEndKey(Bytes.toBytes("eee"))<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        .build();<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    regionSizes.put(hri4.getRegionName(), 10);<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>    setupMocksForNormalizer(regionSizes, RegionInfo);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    List&lt;NormalizationPlan&gt; plans = normalizer.computePlanForTable(tableName);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    assertTrue(plans == null);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>  @Test<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  public void testMergeOfSmallRegions() throws HBaseIOException {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    List&lt;RegionInfo&gt; RegionInfo = new ArrayList&lt;&gt;();<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    Map&lt;byte[], Integer&gt; regionSizes = new HashMap&lt;&gt;();<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>    RegionInfo hri1 = RegionInfoBuilder.newBuilder(tableName)<a name="line.179"></a>
-<span class="sourceLineNo">180</span>        .setStartKey(Bytes.toBytes("aaa"))<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        .setEndKey(Bytes.toBytes("bbb"))<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        .build();<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    RegionInfo.add(hri1);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    regionSizes.put(hri1.getRegionName(), 15);<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>    RegionInfo hri2 = RegionInfoBuilder.newBuilder(tableName)<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        .setStartKey(Bytes.toBytes("bbb"))<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        .setEndKey(Bytes.toBytes("ccc"))<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        .build();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    RegionInfo.add(hri2);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    regionSizes.put(hri2.getRegionName(), 5);<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    RegionInfo hri3 = RegionInfoBuilder.newBuilder(tableName)<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        .setStartKey(Bytes.toBytes("ccc"))<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        .setEndKey(Bytes.toBytes("ddd"))<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        .build();<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    RegionInfo.add(hri3);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    regionSizes.put(hri3.getRegionName(), 5);<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>    RegionInfo hri4 = RegionInfoBuilder.newBuilder(tableName)<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        .setStartKey(Bytes.toBytes("ddd"))<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        .setEndKey(Bytes.toBytes("eee"))<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        .build();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    RegionInfo.add(hri4);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    regionSizes.put(hri4.getRegionName(), 15);<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>    RegionInfo hri5 = RegionInfoBuilder.newBuilder(tableName)<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        .setStartKey(Bytes.toBytes("eee"))<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        .setEndKey(Bytes.toBytes("fff"))<a name="line.209"></a>
-<span class="sourceLineNo">210</span>        .build();<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    RegionInfo.add(hri5);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    regionSizes.put(hri5.getRegionName(), 16);<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    setupMocksForNormalizer(regionSizes, RegionInfo);<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    List&lt;NormalizationPlan&gt; plans = normalizer.computePlanForTable(tableName);<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>    NormalizationPlan plan = plans.get(0);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    assertTrue(plan instanceof MergeNormalizationPlan);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    assertEquals(hri2, ((MergeNormalizationPlan) plan).getFirstRegion());<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    assertEquals(hri3, ((MergeNormalizationPlan) plan).getSecondRegion());<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
-<span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>  // Test for situation illustrated in HBASE-14867<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  @Test<a name="line.224"></a>
-<span class="sourceLineNo">225</span>  public void testMergeOfSecondSmallestRegions() throws HBaseIOException {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    List&lt;RegionInfo&gt; RegionInfo = new ArrayList&lt;&gt;();<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    Map&lt;byte[], Integer&gt; regionSizes = new HashMap&lt;&gt;();<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>    RegionInfo hri1 = RegionInfoBuilder.newBuilder(tableName)<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        .setStartKey(Bytes.toBytes("aaa"))<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        .setEndKey(Bytes.toBytes("bbb"))<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        .build();<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    RegionInfo.add(hri1);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    regionSizes.put(hri1.getRegionName(), 1);<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span>    RegionInfo hri2 = RegionInfoBuilder.newBuilder(tableName)<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        .setStartKey(Bytes.toBytes("bbb"))<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        .setEndKey(Bytes.toBytes("ccc"))<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        .build();<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    RegionInfo.add(hri2);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    regionSizes.put(hri2.getRegionName(), 10000);<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>    RegionInfo hri3 = RegionInfoBuilder.newBuilder(tableName)<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        .setStartKey(Bytes.toBytes("ccc"))<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        .setEndKey(Bytes.toBytes("ddd"))<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        .build();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    RegionInfo.add(hri3);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    regionSizes.put(hri3.getRegionName(), 10000);<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>    RegionInfo hri4 = RegionInfoBuilder.newBuilder(tableName)<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        .setStartKey(Bytes.toBytes("ddd"))<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        .setEndKey(Bytes.toBytes("eee"))<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        .build();<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    RegionInfo.add(hri4);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    regionSizes.put(hri4.getRegionName(), 10000);<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>    RegionInfo hri5 = RegionInfoBuilder.newBuilder(tableName)<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        .setStartKey(Bytes.toBytes("eee"))<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        .setEndKey(Bytes.toBytes("fff"))<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        .build();<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    RegionInfo.add(hri5);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    regionSizes.put(hri5.getRegionName(), 2700);<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>    RegionInfo hri6 = RegionInfoBuilder.newBuilder(tableName)<a name="line.265"></a>
-<span class="sourceLineNo">266</span>        .setStartKey(Bytes.toBytes("fff"))<a name="line.266"></a>
-<span class="sourceLineNo">267</span>        .setEndKey(Bytes.toBytes("ggg"))<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        .build();<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    RegionInfo.add(hri6);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    regionSizes.put(hri6.getRegionName(), 2700);<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>    setupMocksForNormalizer(regionSizes, RegionInfo);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    List&lt;NormalizationPlan&gt; plans = normalizer.computePlanForTable(tableName);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    NormalizationPlan plan = plans.get(0);<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>    assertTrue(plan instanceof MergeNormalizationPlan);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    assertEquals(hri5, ((MergeNormalizationPlan) plan).getFirstRegion());<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    assertEquals(hri6, ((MergeNormalizationPlan) plan).getSecondRegion());<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>  @Test<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  public void testMergeOfSmallNonAdjacentRegions() throws HBaseIOException {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    List&lt;RegionInfo&gt; RegionInfo = new ArrayList&lt;&gt;();<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    Map&lt;byte[], Integer&gt; regionSizes = new HashMap&lt;&gt;();<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>    RegionInfo hri1 = RegionInfoBuilder.newBuilder(tableName)<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        .setStartKey(Bytes.toBytes("aaa"))<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        .setEndKey(Bytes.toBytes("bbb"))<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        .build();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    RegionInfo.add(hri1);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    regionSizes.put(hri1.getRegionName(), 15);<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>    RegionInfo hri2 = RegionInfoBuilder.newBuilder(tableName)<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        .setStartKey(Bytes.toBytes("bbb"))<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        .setEndKey(Bytes.toBytes("ccc"))<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        .build();<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    RegionInfo.add(hri2);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    regionSizes.put(hri2.getRegionName(), 5);<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>    RegionInfo hri3 = RegionInfoBuilder.newBuilder(tableName)<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        .setStartKey(Bytes.toBytes("ccc"))<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        .setEndKey(Bytes.toBytes("ddd"))<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        .build();<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    RegionInfo.add(hri3);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    regionSizes.put(hri3.getRegionName(), 16);<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>    RegionInfo hri4 = RegionInfoBuilder.newBuilder(tableName)<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        .setStartKey(Bytes.toBytes("ddd"))<a name="line.309"></a>
-<span class="sourceLineNo">310</span>        .setEndKey(Bytes.toBytes("eee"))<a name="line.310"></a>
-<span class="sourceLineNo">311</span>        .build();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    RegionInfo.add(hri4);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    regionSizes.put(hri4.getRegionName(), 15);<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span>    RegionInfo hri5 = RegionInfoBuilder.newBuilder(tableName)<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        .setStartKey(Bytes.toBytes("ddd"))<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        .setEndKey(Bytes.toBytes("eee"))<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        .build();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    RegionInfo.add(hri4);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    regionSizes.put(hri5.getRegionName(), 5);<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>    setupMocksForNormalizer(regionSizes, RegionInfo);<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    List&lt;NormalizationPlan&gt; plans = normalizer.computePlanForTable(tableName);<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    assertTrue(plans == null);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  }<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>  @Test<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  public void testSplitOfLargeRegion() throws HBaseIOException {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    List&lt;RegionInfo&gt; RegionInfo = new ArrayList&lt;&gt;();<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    Map&lt;byte[], Integer&gt; regionSizes = new HashMap&lt;&gt;();<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>    RegionInfo hri1 = RegionInfoBuilder.newBuilder(tableName)<a name="line.334"></a>
-<span class="sourceLineNo">335</span>        .setStartKey(Bytes.toBytes("aaa"))<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        .setEndKey(Bytes.toBytes("bbb"))<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        .build();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    RegionInfo.add(hri1);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    regionSizes.put(hri1.getRegionName(), 8);<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>    RegionInfo hri2 = RegionInfoBuilder.newBuilder(tableName)<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        .setStartKey(Bytes.toBytes("bbb"))<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        .setEndKey(Bytes.toBytes("ccc"))<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        .build();<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    RegionInfo.add(hri2);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    regionSizes.put(hri2.getRegionName(), 6);<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>    RegionInfo hri3 = RegionInfoBuilder.newBuilder(tableName)<a name="line.348"></a>
-<span class="sourceLineNo">349</span>        .setStartKey(Bytes.toBytes("ccc"))<a name="line.349"></a>
-<span class="sourceLineNo">350</span>        .setEndKey(Bytes.toBytes("ddd"))<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        .build();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    RegionInfo.add(hri3);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    regionSizes.put(hri3.getRegionName(), 10);<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span>    RegionInfo hri4 = RegionInfoBuilder.newBuilder(tableName)<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        .setStartKey(Bytes.toBytes("ddd"))<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        .setEndKey(Bytes.toBytes("eee"))<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        .build();<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    RegionInfo.add(hri4);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    regionSizes.put(hri4.getRegionName(), 30);<a name="line.360"></a>
-<span class="sourceLineNo">361</span><a name="line.361"></a>
-<span class="sourceLineNo">362</span>    setupMocksForNormalizer(regionSizes, RegionInfo);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    List&lt;NormalizationPlan&gt; plans = normalizer.computePlanForTable(tableName);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    NormalizationPlan plan = plans.get(0);<a name="line.364"></a>
-<span class="sourceLineNo">365</span><a name="line.365"></a>
-<span class="sourceLineNo">366</span>    assertTrue(plan instanceof SplitNormalizationPlan);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    assertEquals(hri4, ((SplitNormalizationPlan) plan).getRegionInfo());<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>  @SuppressWarnings("MockitoCast")<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  protected void setupMocksForNormalizer(Map&lt;byte[], Integer&gt; regionSizes,<a name="line.371"></a>
-<span class="sourceLineNo">372</span>                                         List&lt;RegionInfo&gt; RegionInfo) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    masterServices = Mockito.mock(MasterServices.class, RETURNS_DEEP_STUBS);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    masterRpcServices = Mockito.mock(MasterRpcServices.class, RETURNS_DEEP_STUBS);<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>    // for simplicity all regions are assumed to be on one server; doesn't matter to us<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    ServerName sn = ServerName.valueOf("localhost", 0, 1L);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    when(masterServices.getAssignmentManager().getRegionStates().<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      getRegionsOfTable(any())).thenReturn(RegionInfo);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    when(masterServices.getAssignmentManager().getRegionStates().<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      getRegionServerOfRegion(any())).thenReturn(sn);<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>    for (Map.Entry&lt;byte[], Integer&gt; region : regionSizes.entrySet()) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      RegionMetrics regionLoad = Mockito.mock(RegionMetrics.class);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      when(regionLoad.getRegionName()).thenReturn(region.getKey());<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      when(regionLoad.getStoreFileSize())<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        .thenReturn(new Size(region.getValue(), Size.Unit.MEGABYTE));<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>      // this is possibly broken with jdk9, unclear if false positive or not<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      // suppress it for now, fix it when we get to running tests on 9<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      // see: http://errorprone.info/bugpattern/MockitoCast<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      when((Object) masterServices.getServerManager().getLoad(sn).<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        getRegionMetrics().get(region.getKey())).thenReturn(regionLoad);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    try {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      when(masterRpcServices.isSplitOrMergeEnabled(any(),<a name="line.396"></a>
-<span class="sourceLineNo">397</span>        any())).thenReturn(<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          IsSplitOrMergeEnabledResponse.newBuilder().setEnabled(true).build());<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    } catch (ServiceException se) {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      LOG.debug("error setting isSplitOrMergeEnabled switch", se);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>    normalizer.setMasterServices(masterServices);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    normalizer.setMasterRpcServices(masterRpcServices);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  }<a name="line.405"></a>
-<span class="sourceLineNo">406</span>}<a name="line.406"></a>
+<span class="sourceLineNo">044</span>import org.junit.Assert;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.junit.BeforeClass;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.junit.ClassRule;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.junit.Rule;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.junit.Test;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.junit.experimental.categories.Category;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.junit.rules.TestName;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.mockito.Mockito;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.slf4j.Logger;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.slf4j.LoggerFactory;<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsSplitOrMergeEnabledResponse;<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>/**<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * Tests logic of {@link SimpleRegionNormalizer}.<a name="line.60"></a>
+<span class="sourceLineNo">061</span> */<a name="line.61"></a>
+<span class="sourceLineNo">062</span>@Category({MasterTests.class, SmallTests.class})<a name="line.62"></a>
+<span class="sourceLineNo">063</span>public class TestSimpleRegionNormalizer {<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>  @ClassRule<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.66"></a>
+<span class="sourceLineNo">067</span>      HBaseClassTestRule.forClass(TestSimpleRegionNormalizer.class);<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>  private static final Logger LOG = LoggerFactory.getLogger(TestSimpleRegionNormalizer.class);<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private static RegionNormalizer normalizer;<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>  // mocks<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private static MasterServices masterServices;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  private static MasterRpcServices masterRpcServices;<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>  @Rule<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  public TestName name = new TestName();<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  @BeforeClass<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  public static void beforeAllTests() throws Exception {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    normalizer = new SimpleRegionNormalizer();<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 testPlanComparator() {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    Comparator&lt;NormalizationPlan&gt; comparator = new SimpleRegionNormalizer.PlanComparator();<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    NormalizationPlan splitPlan1 = new SplitNormalizationPlan(null, null);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    NormalizationPlan splitPlan2 = new SplitNormalizationPlan(null, null);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    NormalizationPlan mergePlan1 = new MergeNormalizationPlan(null, null);<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    NormalizationPlan mergePlan2 = new MergeNormalizationPlan(null, null);<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>    assertTrue(comparator.compare(splitPlan1, splitPlan2) == 0);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    assertTrue(comparator.compare(splitPlan2, splitPlan1) == 0);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    assertTrue(comparator.compare(mergePlan1, mergePlan2) == 0);<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    assertTrue(comparator.compare(mergePlan2, mergePlan1) == 0);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    assertTrue(comparator.compare(splitPlan1, mergePlan1) &lt; 0);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    assertTrue(comparator.compare(mergePlan1, splitPlan1) &gt; 0);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  @Test<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  public void testNoNormalizationForMetaTable() throws HBaseIOException {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    TableName testTable = TableName.META_TABLE_NAME;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    List&lt;RegionInfo&gt; RegionInfo = new ArrayList&lt;&gt;();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    Map&lt;byte[], Integer&gt; regionSizes = new HashMap&lt;&gt;();<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>    setupMocksForNormalizer(regionSizes, RegionInfo);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    List&lt;NormalizationPlan&gt; plans = normalizer.computePlanForTable(testTable);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    assertTrue(plans == null);<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  }<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>  @Test<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  public void testNoNormalizationIfTooFewRegions() throws HBaseIOException {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    List&lt;RegionInfo&gt; RegionInfo = new ArrayList&lt;&gt;();<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    Map&lt;byte[], Integer&gt; regionSizes = new HashMap&lt;&gt;();<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    RegionInfo hri1 = RegionInfoBuilder.newBuilder(tableName)<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        .setStartKey(Bytes.toBytes("aaa"))<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        .setEndKey(Bytes.toBytes("bbb"))<a name="line.119"></a>
+<span class="sourceLineNo">120</span>        .build();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    RegionInfo.add(hri1);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    regionSizes.put(hri1.getRegionName(), 10);<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>    RegionInfo hri2 = RegionInfoBuilder.newBuilder(tableName)<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        .setStartKey(Bytes.toBytes("bbb"))<a name="line.125"></a>
+<span class="sourceLineNo">126</span>        .setEndKey(Bytes.toBytes("ccc"))<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        .build();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    RegionInfo.add(hri2);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    regionSizes.put(hri2.getRegionName(), 15);<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>    setupMocksForNormalizer(regionSizes, RegionInfo);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    List&lt;NormalizationPlan&gt; plans = normalizer.computePlanForTable(tableName);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    assertTrue(plans == null);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  }<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>  @Test<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  public void testNoNormalizationOnNormalizedCluster() throws HBaseIOException {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    List&lt;RegionInfo&gt; RegionInfo = new ArrayList&lt;&gt;();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    Map&lt;byte[], Integer&gt; regionSizes = new HashMap&lt;&gt;();<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>    RegionInfo hri1 = RegionInfoBuilder.newBuilder(tableName)<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        .setStartKey(Bytes.toBytes("aaa"))<a name="line.143"></a>
+<span class="sourceLineNo">144</span>        .setEndKey(Bytes.toBytes("bbb"))<a name="line.144"></a>
+<span class="sourceLineNo">145</span>        .build();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    RegionInfo.add(hri1);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    regionSizes.put(hri1.getRegionName(), 10);<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>    RegionInfo hri2 = RegionInfoBuilder.newBuilder(tableName)<a name="line.149"></a>
+<span class="sourceLineNo">150</span>        .setStartKey(Bytes.toBytes("bbb"))<a name="line.150"></a>
+<span class="sourceLineNo">151</span>        .setEndKey(Bytes.toBytes("ccc"))<a name="line.151"></a>
+<span class="sourceLineNo">152</span>        .build();<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    RegionInfo.add(hri2);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    regionSizes.put(hri2.getRegionName(), 15);<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>    RegionInfo hri3 = RegionInfoBuilder.newBuilder(tableName)<a name="line.156"></a>
+<span class="sourceLineNo">157</span>        .setStartKey(Bytes.toBytes("ccc"))<a name="line.157"></a>
+<span class="sourceLineNo">158</span>        .setEndKey(Bytes.toBytes("ddd"))<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        .build();<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    RegionInfo.add(hri3);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    regionSizes.put(hri3.getRegionName(), 8);<a name="line.161"></a>
+<span class="sourceLineNo">162</span><a name="line.162"></a>
+<span class="sourceLineNo">163</span>    RegionInfo hri4 = RegionInfoBuilder.newBuilder(tableName)<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        .setStartKey(Bytes.toBytes("ddd"))<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        .setEndKey(Bytes.toBytes("eee"))<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        .build();<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    regionSizes.put(hri4.getRegionName(), 10);<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>    setupMocksForNormalizer(regionSizes, RegionInfo);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    List&lt;NormalizationPlan&gt; plans = normalizer.computePlanForTable(tableName);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    assertTrue(plans == null);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>  @Test<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  public void testMergeOfSmallRegions() throws HBaseIOException {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    List&lt;RegionInfo&gt; RegionInfo = new ArrayList&lt;&gt;();<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    Map&lt;byte[], Integer&gt; regionSizes = new HashMap&lt;&gt;();<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span>    RegionInfo hri1 = RegionInfoBuilder.newBuilder(tableName)<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        .setStartKey(Bytes.toBytes("aaa"))<a name="line.181"></a>
+<span class="sourceLineNo">182</span>        .setEndKey(Bytes.toBytes("bbb"))<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        .build();<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    RegionInfo.add(hri1);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    regionSizes.put(hri1.getRegionName(), 15);<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>    RegionInfo hri2 = RegionInfoBuilder.newBuilder(tableName)<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        .setStartKey(Bytes.toBytes("bbb"))<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        .setEndKey(Bytes.toBytes("ccc"))<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        .build();<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    RegionInfo.add(hri2);<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    regionSizes.put(hri2.getRegionName(), 5);<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>    RegionInfo hri3 = RegionInfoBuilder.newBuilder(tableName)<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        .setStartKey(Bytes.toBytes("ccc"))<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        .setEndKey(Bytes.toBytes("ddd"))<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        .build();<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    RegionInfo.add(hri3);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    regionSizes.put(hri3.getRegionName(), 5);<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    RegionInfo hri4 = RegionInfoBuilder.newBuilder(tableName)<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        .setStartKey(Bytes.toBytes("ddd"))<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        .setEndKey(Bytes.toBytes("eee"))<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        .build();<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    RegionInfo.add(hri4);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    regionSizes.put(hri4.getRegionName(), 15);<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>    RegionInfo hri5 = RegionInfoBuilder.newBuilder(tableName)<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        .setStartKey(Bytes.toBytes("eee"))<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        .setEndKey(Bytes.toBytes("fff"))<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        .build();<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    RegionInfo.add(hri5);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    regionSizes.put(hri5.getRegionName(), 16);<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>    setupMocksForNormalizer(regionSizes, RegionInfo);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    List&lt;NormalizationPlan&gt; plans = normalizer.computePlanForTable(tableName);<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span>    NormalizationPlan plan = plans.get(0);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    assertTrue(plan instanceof MergeNormalizationPlan);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    assertEquals(hri2, ((MergeNormalizationPlan) plan).getFirstRegion());<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    assertEquals(hri3, ((MergeNormalizationPlan) plan).getSecondRegion());<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>  // Test for situation illustrated in HBASE-14867<a name="line.224"></a>
+<span class="sourceLineNo">225</span>  @Test<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  public void testMergeOfSecondSmallestRegions() throws HBaseIOException {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    List&lt;RegionInfo&gt; RegionInfo = new ArrayList&lt;&gt;();<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    Map&lt;byte[], Integer&gt; regionSizes = new HashMap&lt;&gt;();<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>    RegionInfo hri1 = RegionInfoBuilder.newBuilder(tableName)<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        .setStartKey(Bytes.toBytes("aaa"))<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        .setEndKey(Bytes.toBytes("bbb"))<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        .build();<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    RegionInfo.add(hri1);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    regionSizes.put(hri1.getRegionName(), 1);<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>    RegionInfo hri2 = RegionInfoBuilder.newBuilder(tableName)<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        .setStartKey(Bytes.toBytes("bbb"))<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        .setEndKey(Bytes.toBytes("ccc"))<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        .build();<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    RegionInfo.add(hri2);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    regionSizes.put(hri2.getRegionName(), 10000);<a name="line.243"></a>
+<span class="sourceLineNo">244</span><a name="line.244"></a>
+<span class="sourceLineNo">245</span>    RegionInfo hri3 = RegionInfoBuilder.newBuilder(tableName)<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        .setStartKey(Bytes.toBytes("ccc"))<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        .setEndKey(Bytes.toBytes("ddd"))<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        .build();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    RegionInfo.add(hri3);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    regionSizes.put(hri3.getRegionName(), 10000);<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>    RegionInfo hri4 = RegionInfoBuilder.newBuilder(tableName)<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        .setStartKey(Bytes.toBytes("ddd"))<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        .setEndKey(Bytes.toBytes("eee"))<a name="line.254"></a>
+<span class="sourceLineNo">255</span>        .build();<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    RegionInfo.add(hri4);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    regionSizes.put(hri4.getRegionName(), 10000);<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span>    RegionInfo hri5 = RegionInfoBuilder.newBuilder(tableName)<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        .setStartKey(Bytes.toBytes("eee"))<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        .setEndKey(Bytes.toBytes("fff"))<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        .build();<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    RegionInfo.add(hri5);<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    regionSizes.put(hri5.getRegionName(), 2700);<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span>    RegionInfo hri6 = RegionInfoBuilder.newBuilder(tableName)<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        .setStartKey(Bytes.toBytes("fff"))<a name="line.267"></a>
+<span class="sourceLineNo">268</span>        .setEndKey(Bytes.toBytes("ggg"))<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        .build();<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    RegionInfo.add(hri6);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    regionSizes.put(hri6.getRegionName(), 2700);<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>    setupMocksForNormalizer(regionSizes, RegionInfo);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    List&lt;NormalizationPlan&gt; plans = normalizer.computePlanForTable(tableName);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    NormalizationPlan plan = plans.get(0);<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>    assertTrue(plan instanceof MergeNormalizationPlan);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    assertEquals(hri5, ((MergeNormalizationPlan) plan).getFirstRegion());<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    assertEquals(hri6, ((MergeNormalizationPlan) plan).getSecondRegion());<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>  @Test<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public void testMergeOfSmallNonAdjacentRegions() throws HBaseIOException {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    List&lt;RegionInfo&gt; RegionInfo = new ArrayList&lt;&gt;();<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    Map&lt;byte[], Integer&gt; regionSizes = new HashMap&lt;&gt;();<a name="line.286"></a>
+<span class="sourceLineNo">287</span><a name="line.287"></a>
+<span class="sourceLineNo">288</span>    RegionInfo hri1 = RegionInfoBuilder.newBuilder(tableName)<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        .setStartKey(Bytes.toBytes("aaa"))<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        .setEndKey(Bytes.toBytes("bbb"))<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        .build();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    RegionInfo.add(hri1);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    regionSizes.put(hri1.getRegionName(), 15);<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>    RegionInfo hri2 = RegionInfoBuilder.newBuilder(tableName)<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        .setStartKey(Bytes.toBytes("bbb"))<a name="line.296"></a>
+<span class="sourceLineNo">297</span>        .setEndKey(Bytes.toBytes("ccc"))<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        .build();<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    RegionInfo.add(hri2);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    regionSizes.put(hri2.getRegionName(), 5);<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>    RegionInfo hri3 = RegionInfoBuilder.newBuilder(tableName)<a name="line.302"></a>
+<span class="sourceLineNo">303</span>        .setStartKey(Bytes.toBytes("ccc"))<a name="line.303"></a>
+<span class="sourceLineNo">304</span>        .setEndKey(Bytes.toBytes("ddd"))<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        .build();<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    RegionInfo.add(hri3);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    regionSizes.put(hri3.getRegionName(), 16);<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span>    RegionInfo hri4 = RegionInfoBuilder.newBuilder(tableName)<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        .setStartKey(Bytes.toBytes("ddd"))<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        .setEndKey(Bytes.toBytes("eee"))<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        .build();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    RegionInfo.add(hri4);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    regionSizes.put(hri4.getRegionName(), 15);<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span>    RegionInfo hri5 = RegionInfoBuilder.newBuilder(tableName)<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        .setStartKey(Bytes.toBytes("ddd"))<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        .setEndKey(Bytes.toBytes("eee"))<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        .build();<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    RegionInfo.add(hri4);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    regionSizes.put(hri5.getRegionName(), 5);<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>    setupMocksForNormalizer(regionSizes, RegionInfo);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    List&lt;NormalizationPlan&gt; plans = normalizer.computePlanForTable(tableName);<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span>    assertTrue(plans == null);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  }<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>  @Test<a name="line.329"></a>
+<span class="sourceLineNo">330</span>  public void testSplitOfLargeRegion() throws HBaseIOException {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    List&lt;RegionInfo&gt; RegionInfo = new ArrayList&lt;&gt;();<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    Map&lt;byte[], Integer&gt; regionSizes = new HashMap&lt;&gt;();<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>    RegionInfo hri1 = RegionInfoBuilder.newBuilder(tableName)<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        .setStartKey(Bytes.toBytes("aaa"))<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        .setEndKey(Bytes.toBytes("bbb"))<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        .build();<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    RegionInfo.add(hri1);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    regionSizes.put(hri1.getRegionName(), 8);<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>    RegionInfo hri2 = RegionInfoBuilder.newBuilder(tableName)<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        .setStartKey(Bytes.toBytes("bbb"))<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        .setEndKey(Bytes.toBytes("ccc"))<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        .build();<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    RegionInfo.add(hri2);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    regionSizes.put(hri2.getRegionName(), 6);<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span>    RegionInfo hri3 = RegionInfoBuilder.newBuilder(tableName)<a name="line.349"></a>
+<span class="sourceLineNo">350</span>        .setStartKey(Bytes.toBytes("ccc"))<a name="line.350"></a>
+<span class="sourceLineNo">351</span>        .setEndKey(Bytes.toBytes("ddd"))<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        .build();<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    RegionInfo.add(hri3);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    regionSizes.put(hri3.getRegionName(), 10);<a name="line.354"></a>
+<span class="sourceLineNo">355</span><a name="line.355"></a>
+<span class="sourceLineNo">356</span>    RegionInfo hri4 = RegionInfoBuilder.newBuilder(tableName)<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        .setStartKey(Bytes.toBytes("ddd"))<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        .setEndKey(Bytes.toBytes("eee"))<a name="line.358"></a>
+<span class="sourceLineNo">359</span>        .build();<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    RegionInfo.add(hri4);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    regionSizes.put(hri4.getRegionName(), 30);<a name="line.361"></a>
+<span class="sourceLineNo">362</span><a name="line.362"></a>
+<span class="sourceLineNo">363</span>    setupMocksForNormalizer(regionSizes, RegionInfo);<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    List&lt;NormalizationPlan&gt; plans = normalizer.computePlanForTable(tableName);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    NormalizationPlan plan = plans.get(0);<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>    assertTrue(plan instanceof SplitNormalizationPlan);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    assertEquals(hri4, ((SplitNormalizationPlan) plan).getRegionInfo());<a name="line.368"></a>
+<span class="sourceLineNo">369</span>  }<a name="line.369"></a>
+<span class="sourceLineNo">370</span><a name="line.370"></a>
+<span class="sourceLineNo">371</span>  @Test<a name="line.371"></a>
+<span class="sourceLineNo">372</span>  public void testSplitWithTargetRegionCount() throws Exception {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    List&lt;RegionInfo&gt; RegionInfo = new ArrayList&lt;&gt;();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    Map&lt;byte[], Integer&gt; regionSizes = new HashMap&lt;&gt;();<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>    RegionInfo hri1 = RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes("aaa"))<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        .setEndKey(Bytes.toBytes("bbb")).build();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    RegionInfo.add(hri1);<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    regionSizes.put(hri1.getRegionName(), 20);<a name="line.380"></a>
+<span class="sourceLineNo">381</span><a name="line.381"></a>
+<span class="sourceLineNo">382</span>    RegionInfo hri2 = RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes("bbb"))<a name="line.382"></a>
+<span class="sourceLineNo">383</span>        .setEndKey(Bytes.toBytes("ccc")).build();<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    RegionInfo.add(hri2);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    regionSizes.put(hri2.getRegionName(), 40);<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span>    RegionInfo hri3 = RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes("ccc"))<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        .setEndKey(Bytes.toBytes("ddd")).build();<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    RegionInfo.add(hri3);<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    regionSizes.put(hri3.getRegionName(), 60);<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span>    RegionInfo hri4 = RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes("ddd"))<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        .setEndKey(Bytes.toBytes("eee")).build();<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    RegionInfo.add(hri4);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    regionSizes.put(hri4.getRegionName(), 80);<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span>    RegionInfo hri5 = RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes("eee"))<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        .setEndKey(Bytes.toBytes("fff")).build();<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    RegionInfo.add(hri5);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    regionSizes.put(hri5.getRegionName(), 100);<a name="line.400"></a>
+<span class="sourceLineNo">401</span><a name="line.401"></a>
+<span class="sourceLineNo">402</span>    RegionInfo hri6 = RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes("fff"))<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        .setEndKey(Bytes.toBytes("ggg")).build();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    RegionInfo.add(hri6);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    regionSizes.put(hri6.getRegionName(), 120);<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span>    setupMocksForNormalizer(regionSizes, RegionInfo);<a name="line.407"></a>
+<span class="sourceLineNo">408</span><a name="line.408"></a>
+<span class="sourceLineNo">409</span>    // test when target region size is 20<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    when(masterServices.getTableDescriptors().get(any()).getNormalizerTargetRegionSize())<a name="line.410"></a>
+<span class="sourceLineNo">411</span>        .thenReturn(20L);<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    List&lt;NormalizationPlan&gt; plans = normalizer.computePlanForTable(tableName);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    Assert.assertEquals(4, plans.size());<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span>    for (NormalizationPlan plan : plans) {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      assertTrue(plan instanceof SplitNormalizationPlan);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    }<a name="line.417"></a>
+<span class="sourceLineNo">418</span><a name="line.418"></a>
+<span class="sourceLineNo">419</span>    // test when target region size is 200<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    when(masterServices.getTableDescriptors().get(any()).getNormalizerTargetRegionSize())<a name="line.420"></a>
+<span class="sourceLineNo">421</span>        .thenReturn(200L);<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    plans = normalizer.computePlanForTable(tableName);<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    Assert.assertEquals(2, plans.size());<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    NormalizationPlan plan = plans.get(0);<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    assertTrue(plan instanceof MergeNormalizationPlan);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    assertEquals(hri1, ((MergeNormalizationPlan) plan).getFirstRegion());<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    assertEquals(hri2, ((MergeNormalizationPlan) plan).getSecondRegion());<a name="line.427"></a>
+<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>  @Test<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public void testSplitWithTargetRegionSize() throws Exception {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    List&lt;RegionInfo&gt; RegionInfo = new ArrayList&lt;&gt;();<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    Map&lt;byte[], Integer&gt; regionSizes = new HashMap&lt;&gt;();<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>    RegionInfo hri1 = RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes("aaa"))<a name="line.436"></a>
+<span class="sourceLineNo">437</span>        .setEndKey(Bytes.toBytes("bbb")).build();<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    RegionInfo.add(hri1);<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    regionSizes.put(hri1.getRegionName(), 20);<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>    RegionInfo hri2 = RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes("bbb"))<a name="line.441"></a>
+<span class="sourceLineNo">442</span>        .setEndKey(Bytes.toBytes("ccc")).build();<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    RegionInfo.add(hri2);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    regionSizes.put(hri2.getRegionName(), 40);<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span>    RegionInfo hri3 = RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes("ccc"))<a name="line.446"></a>
+<span class="sourceLineNo">447</span>        .setEndKey(Bytes.toBytes("ddd")).build();<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    RegionInfo.add(hri3);<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    regionSizes.put(hri3.getRegionName(), 60);<a name="line.449"></a>
+<span class="sourceLineNo">450</span><a name="line.450"></a>
+<span class="sourceLineNo">451</span>    RegionInfo hri4 = RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes("ddd"))<a name="line.451"></a>
+<span class="sourceLineNo">452</span>        .setEndKey(Bytes.toBytes("eee")).build();<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    RegionInfo.add(hri4);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    regionSizes.put(hri4.getRegionName(), 80);<a name="line.454"></a>
+<span class="sourceLineNo">455</span><a name="line.455"></a>
+<span class="sourceLineNo">456</span>    setupMocksForNormalizer(regionSizes, RegionInfo);<a name="line.456"></a>
+<span class="sourceLineNo">457</span><a name="line.457"></a>
+<span class="sourceLineNo">458</span>    // test when target region count is 8<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    when(masterServices.getTableDescriptors().get(any()).getNormalizerTargetRegionCount())<a name="line.459"></a>
+<span class="sourceLineNo">460</span>        .thenReturn(8);<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    List&lt;NormalizationPlan&gt; plans = normalizer.computePlanForTable(tableName);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>    Assert.assertEquals(2, plans.size());<a name="line.462"></a>
+<span class="sourceLineNo">463</span><a name="line.463"></a>
+<span class="sourceLineNo">464</span>    for (NormalizationPlan plan : plans) {<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      assertTrue(plan instanceof SplitNormalizationPlan);<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>    // test when target region count is 3<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    when(masterServices.getTableDescriptors().get(any()).getNormalizerTargetRegionCount())<a name="line.469"></a>
+<span class="sourceLineNo">470</span>        .thenReturn(3);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    plans = normalizer.computePlanForTable(tableName);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    Assert.assertEquals(1, plans.size());<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    NormalizationPlan plan = plans.get(0);<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    assertTrue(plan instanceof MergeNormalizationPlan);<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    assertEquals(hri1, ((MergeNormalizationPlan) plan).getFirstRegion());<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    assertEquals(hri2, ((MergeNormalizationPlan) plan).getSecondRegion());<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>  @SuppressWarnings("MockitoCast")<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  protected void setupMocksForNormalizer(Map&lt;byte[], Integer&gt; regionSizes,<a name="line.480"></a>
+<span class="sourceLineNo">481</span>                                         List&lt;RegionInfo&gt; RegionInfo) {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    masterServices = Mockito.mock(MasterServices.class, RETURNS_DEEP_STUBS);<a name="line.482"></a>
+<span class="sourceLineNo">483</span>    masterRpcServices = Mockito.mock(MasterRpcServices.class, RETURNS_DEEP_STUBS);<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // for simplicity all regions are assumed to be on one server; doesn't matter to us<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    ServerName sn = ServerName.valueOf("localhost", 0, 1L);<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    when(masterServices.getAssignmentManager().getRegionStates().<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      getRegionsOfTable(any())).thenReturn(RegionInfo);<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    when(masterServices.getAssignmentManager().getRegionStates().<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      getRegionServerOfRegion(any())).thenReturn(sn);<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span>    for (Map.Entry&lt;byte[], Integer&gt; region : regionSizes.entrySet()) {<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      RegionMetrics regionLoad = Mockito.mock(RegionMetrics.class);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>      when(regionLoad.getRegionName()).thenReturn(region.getKey());<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      when(regionLoad.getStoreFileSize())<a name="line.495"></a>
+<span class="sourceLineNo">496</span>        .thenReturn(new Size(region.getValue(), Size.Unit.MEGABYTE));<a name="line.496"></a>
+<span class="sourceLineNo">497</span><a name="line.497"></a>
+<span class="sourceLineNo">498</span>      // this is possibly broken with jdk9, unclear if false positive or not<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      // suppress it for now, fix it when we get to running tests on 9<a name="line.499"></a>
+<span class="sourceLineNo">500</span>      // see: http://errorprone.info/bugpattern/MockitoCast<a name="line.500"></a>
+<span class="sourceLineNo">501</span>      when((Object) masterServices.getServerManager().getLoad(sn).<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        getRegionMetrics().get(region.getKey())).thenReturn(regionLoad);<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    }<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    try {<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      when(masterRpcServices.isSplitOrMergeEnabled(any(),<a name="line.505"></a>
+<span class="sourceLineNo">506</span>        any())).thenReturn(<a name="line.506"></a>
+<span class="sourceLineNo">507</span>          IsSplitOrMergeEnabledResponse.newBuilder().setEnabled(true).build());<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    } catch (ServiceException se) {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      LOG.debug("error setting isSplitOrMergeEnabled switch", se);<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span>    normalizer.setMasterServices(masterServices);<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    normalizer.setMasterRpcServices(masterRpcServices);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>  }<a name="line.514"></a>
+<span class="sourceLineNo">515</span>}<a name="line.515"></a>
 
 
 


[31/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/apidocs/org/apache/hadoop/hbase/HTableDescriptor.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/HTableDescriptor.html b/apidocs/org/apache/hadoop/hbase/HTableDescriptor.html
index f29213b..b2d33e2 100644
--- a/apidocs/org/apache/hadoop/hbase/HTableDescriptor.html
+++ b/apidocs/org/apache/hadoop/hbase/HTableDescriptor.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":42,"i1":42,"i2":42,"i3":42,"i4":42,"i5":42,"i6":42,"i7":42,"i8":42,"i9":42,"i10":42,"i11":42,"i12":42,"i13":42,"i14":42,"i15":42,"i16":42,"i17":42,"i18":42,"i19":42,"i20":42,"i21":42,"i22":42,"i23":42,"i24":42,"i25":42,"i26":42,"i27":42,"i28":42,"i29":42,"i30":42,"i31":42,"i32":42,"i33":42,"i34":42,"i35":42,"i36":42,"i37":42,"i38":42,"i39":42,"i40":42,"i41":42,"i42":42,"i43":42,"i44":42,"i45":41,"i46":42,"i47":42,"i48":42,"i49":42,"i50":42,"i51":42,"i52":42,"i53":42,"i54":42,"i55":42,"i56":42,"i57":42,"i58":42,"i59":42,"i60":42,"i61":42,"i62":42,"i63":42,"i64":42,"i65":42,"i66":42,"i67":42,"i68":42,"i69":42,"i70":42,"i71":42,"i72":42,"i73":42,"i74":42};
+var methods = {"i0":42,"i1":42,"i2":42,"i3":42,"i4":42,"i5":42,"i6":42,"i7":42,"i8":42,"i9":42,"i10":42,"i11":42,"i12":42,"i13":42,"i14":42,"i15":42,"i16":42,"i17":42,"i18":42,"i19":42,"i20":42,"i21":42,"i22":42,"i23":42,"i24":42,"i25":42,"i26":42,"i27":42,"i28":42,"i29":42,"i30":42,"i31":42,"i32":42,"i33":42,"i34":42,"i35":42,"i36":42,"i37":42,"i38":42,"i39":42,"i40":42,"i41":42,"i42":42,"i43":42,"i44":42,"i45":42,"i46":42,"i47":41,"i48":42,"i49":42,"i50":42,"i51":42,"i52":42,"i53":42,"i54":42,"i55":42,"i56":42,"i57":42,"i58":42,"i59":42,"i60":42,"i61":42,"i62":42,"i63":42,"i64":42,"i65":42,"i66":42,"i67":42,"i68":42,"i69":42,"i70":42,"i71":42,"i72":42,"i73":42,"i74":42,"i75":42,"i76":42,"i77":42,"i78":42};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -261,6 +261,18 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <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 class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#NORMALIZER_TARGET_REGION_COUNT">NORMALIZER_TARGET_REGION_COUNT</a></span></code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <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 class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#NORMALIZER_TARGET_REGION_SIZE">NORMALIZER_TARGET_REGION_SIZE</a></span></code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <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 class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#OWNER">OWNER</a></span></code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
@@ -544,25 +556,39 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 </td>
 </tr>
 <tr id="i23" class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getNormalizerTargetRegionCount--">getNormalizerTargetRegionCount</a></span>()</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<div class="block">Check if there is the target region count.</div>
+</td>
+</tr>
+<tr id="i24" class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getNormalizerTargetRegionSize--">getNormalizerTargetRegionSize</a></span>()</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<div class="block">Check if there is the target region size.</div>
+</td>
+</tr>
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code><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 class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getOwnerString--">getOwnerString</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getPriority--">getPriority</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr id="i25" class="rowColor">
+<tr id="i27" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getRegionReplication--">getRegionReplication</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Returns the configured replicas per region</div>
 </td>
 </tr>
-<tr id="i26" class="altColor">
+<tr id="i28" class="altColor">
 <td class="colFirst"><code><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 class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getRegionSplitPolicyClassName--">getRegionSplitPolicyClassName</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
@@ -570,68 +596,68 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
  determines when a region split should occur.</div>
 </td>
 </tr>
-<tr id="i27" class="rowColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getTableName--">getTableName</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Get the name of the table</div>
 </td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code>byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getValue-byte:A-">getValue</a></span>(byte[]&nbsp;key)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Getter for accessing the metadata associated with the key.</div>
 </td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getValue-org.apache.hadoop.hbase.util.Bytes-">getValue</a></span>(<a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Getter for accessing the metadata associated with the key.</div>
 </td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code><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 class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getValue-java.lang.String-">getValue</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Getter for accessing the metadata associated with the key.</div>
 </td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>,<a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getValues--">getValues</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#hasColumnFamily-byte:A-">hasColumnFamily</a></span>(byte[]&nbsp;name)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Checks to see if this table contains the given column family</div>
 </td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#hasCoprocessor-java.lang.String-">hasCoprocessor</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;classNameToMatch)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Check if the table has an attached co-processor represented by the name className</div>
 </td>
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#hasFamily-byte:A-">hasFamily</a></span>(byte[]&nbsp;familyName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Checks to see if this table contains the given column family</div>
 </td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#hashCode--">hashCode</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i38" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#hasRegionMemstoreReplication--">hasRegionMemstoreReplication</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -640,20 +666,20 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 </div>
 </td>
 </tr>
-<tr id="i37" class="rowColor">
+<tr id="i39" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#hasRegionMemStoreReplication--">hasRegionMemStoreReplication</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr id="i38" class="altColor">
+<tr id="i40" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#isCompactionEnabled--">isCompactionEnabled</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Check if the compaction enable flag of the table is true.</div>
 </td>
 </tr>
-<tr id="i39" class="rowColor">
+<tr id="i41" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#isMetaRegion--">isMetaRegion</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
@@ -661,83 +687,83 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
  region.</div>
 </td>
 </tr>
-<tr id="i40" class="altColor">
+<tr id="i42" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#isMetaTable--">isMetaTable</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Checks if the table is a <code>hbase:meta</code> table</div>
 </td>
 </tr>
-<tr id="i41" class="rowColor">
+<tr id="i43" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#isNormalizationEnabled--">isNormalizationEnabled</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Check if normalization enable flag of the table is true.</div>
 </td>
 </tr>
-<tr id="i42" class="altColor">
+<tr id="i44" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#isReadOnly--">isReadOnly</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Check if the readOnly flag of the table is set.</div>
 </td>
 </tr>
-<tr id="i43" class="rowColor">
+<tr id="i45" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#isRootRegion--">isRootRegion</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">This is vestigial API.</div>
 </td>
 </tr>
-<tr id="i44" class="altColor">
+<tr id="i46" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#modifyFamily-org.apache.hadoop.hbase.HColumnDescriptor-">modifyFamily</a></span>(<a href="../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;family)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Modifies the existing column family.</div>
 </td>
 </tr>
-<tr id="i45" class="rowColor">
+<tr id="i47" class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#parseFrom-byte:A-">parseFrom</a></span>(byte[]&nbsp;bytes)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr id="i46" class="altColor">
+<tr id="i48" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#remove-byte:A-">remove</a></span>(byte[]&nbsp;key)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Remove metadata represented by the key from the map</div>
 </td>
 </tr>
-<tr id="i47" class="rowColor">
+<tr id="i49" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#remove-org.apache.hadoop.hbase.util.Bytes-">remove</a></span>(<a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Remove metadata represented by the key from the map</div>
 </td>
 </tr>
-<tr id="i48" class="altColor">
+<tr id="i50" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#remove-java.lang.String-">remove</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Remove metadata represented by the key from the map</div>
 </td>
 </tr>
-<tr id="i49" class="rowColor">
+<tr id="i51" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#removeConfiguration-java.lang.String-">removeConfiguration</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Remove a config setting represented by the key from the map</div>
 </td>
 </tr>
-<tr id="i50" class="altColor">
+<tr id="i52" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#removeCoprocessor-java.lang.String-">removeCoprocessor</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;className)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Remove a coprocessor from those set on the table</div>
 </td>
 </tr>
-<tr id="i51" class="rowColor">
+<tr id="i53" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#removeFamily-byte:A-">removeFamily</a></span>(byte[]&nbsp;column)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
@@ -745,14 +771,14 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
  from the table descriptor</div>
 </td>
 </tr>
-<tr id="i52" class="altColor">
+<tr id="i54" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setCompactionEnabled-boolean-">setCompactionEnabled</a></span>(boolean&nbsp;isEnable)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Setting the table compaction enable flag.</div>
 </td>
 </tr>
-<tr id="i53" class="rowColor">
+<tr id="i55" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setConfiguration-java.lang.String-java.lang.String-">setConfiguration</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key,
                 <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;value)</code>
@@ -760,14 +786,14 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <div class="block">Setter for storing a configuration setting in map.</div>
 </td>
 </tr>
-<tr id="i54" class="altColor">
+<tr id="i56" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setDurability-org.apache.hadoop.hbase.client.Durability-">setDurability</a></span>(<a href="../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Sets the <a href="../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><code>Durability</code></a> setting for the table.</div>
 </td>
 </tr>
-<tr id="i55" class="rowColor">
+<tr id="i57" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setFlushPolicyClassName-java.lang.String-">setFlushPolicyClassName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;clazz)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
@@ -775,7 +801,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
  need to be flushed when flushing a region.</div>
 </td>
 </tr>
-<tr id="i56" class="altColor">
+<tr id="i58" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setMaxFileSize-long-">setMaxFileSize</a></span>(long&nbsp;maxFileSize)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
@@ -783,7 +809,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
  split is triggered.</div>
 </td>
 </tr>
-<tr id="i57" class="rowColor">
+<tr id="i59" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setMemStoreFlushSize-long-">setMemStoreFlushSize</a></span>(long&nbsp;memstoreFlushSize)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
@@ -791,32 +817,44 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
  memstore are flushed to the filesystem.</div>
 </td>
 </tr>
-<tr id="i58" class="altColor">
+<tr id="i60" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setNormalizationEnabled-boolean-">setNormalizationEnabled</a></span>(boolean&nbsp;isEnable)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Setting the table normalization enable flag.</div>
 </td>
 </tr>
-<tr id="i59" class="rowColor">
+<tr id="i61" class="rowColor">
+<td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setNormalizerTargetRegionCount-int-">setNormalizerTargetRegionCount</a></span>(int&nbsp;regionCount)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+&nbsp;</td>
+</tr>
+<tr id="i62" class="altColor">
+<td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setNormalizerTargetRegionSize-long-">setNormalizerTargetRegionSize</a></span>(long&nbsp;regionSize)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+&nbsp;</td>
+</tr>
+<tr id="i63" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setOwner-org.apache.hadoop.hbase.security.User-">setOwner</a></span>(<a href="../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;owner)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>
 </tr>
-<tr id="i60" class="altColor">
+<tr id="i64" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setOwnerString-java.lang.String-">setOwnerString</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;ownerString)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>
 </tr>
-<tr id="i61" class="rowColor">
+<tr id="i65" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setPriority-int-">setPriority</a></span>(int&nbsp;priority)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr id="i62" class="altColor">
+<tr id="i66" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setReadOnly-boolean-">setReadOnly</a></span>(boolean&nbsp;readOnly)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
@@ -824,7 +862,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
  only.</div>
 </td>
 </tr>
-<tr id="i63" class="rowColor">
+<tr id="i67" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setRegionMemstoreReplication-boolean-">setRegionMemstoreReplication</a></span>(boolean&nbsp;memstoreReplication)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -833,21 +871,21 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 </div>
 </td>
 </tr>
-<tr id="i64" class="altColor">
+<tr id="i68" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setRegionMemStoreReplication-boolean-">setRegionMemStoreReplication</a></span>(boolean&nbsp;memstoreReplication)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Enable or Disable the memstore replication from the primary region to the replicas.</div>
 </td>
 </tr>
-<tr id="i65" class="rowColor">
+<tr id="i69" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setRegionReplication-int-">setRegionReplication</a></span>(int&nbsp;regionReplication)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Sets the number of replicas per region.</div>
 </td>
 </tr>
-<tr id="i66" class="altColor">
+<tr id="i70" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setRegionSplitPolicyClassName-java.lang.String-">setRegionSplitPolicyClassName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;clazz)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
@@ -855,7 +893,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
  determines when a region split should occur.</div>
 </td>
 </tr>
-<tr id="i67" class="rowColor">
+<tr id="i71" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setValue-byte:A-byte:A-">setValue</a></span>(byte[]&nbsp;key,
         byte[]&nbsp;value)</code>
@@ -863,14 +901,14 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <div class="block">Setter for storing metadata as a (key, value) pair in map</div>
 </td>
 </tr>
-<tr id="i68" class="altColor">
+<tr id="i72" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setValue-org.apache.hadoop.hbase.util.Bytes-org.apache.hadoop.hbase.util.Bytes-">setValue</a></span>(<a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key,
         <a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;value)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr id="i69" class="rowColor">
+<tr id="i73" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setValue-java.lang.String-java.lang.String-">setValue</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key,
         <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;value)</code>
@@ -878,32 +916,32 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <div class="block">Setter for storing metadata as a (key, value) pair in map</div>
 </td>
 </tr>
-<tr id="i70" class="altColor">
+<tr id="i74" class="altColor">
 <td class="colFirst"><code>byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#toByteArray--">toByteArray</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr id="i71" class="rowColor">
+<tr id="i75" class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#toHColumnDescriptor-org.apache.hadoop.hbase.client.ColumnFamilyDescriptor-">toHColumnDescriptor</a></span>(<a href="../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;desc)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Return a HColumnDescriptor for user to keep the compatibility as much as possible.</div>
 </td>
 </tr>
-<tr id="i72" class="altColor">
+<tr id="i76" class="altColor">
 <td class="colFirst"><code><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 class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#toString--">toString</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr id="i73" class="rowColor">
+<tr id="i77" class="rowColor">
 <td class="colFirst"><code><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 class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#toStringCustomizedValues--">toStringCustomizedValues</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr id="i74" class="altColor">
+<tr id="i78" class="altColor">
 <td class="colFirst"><code><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 class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#toStringTableAttributes--">toStringTableAttributes</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
@@ -1130,13 +1168,41 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 </dl>
 </li>
 </ul>
+<a name="NORMALIZER_TARGET_REGION_COUNT">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>NORMALIZER_TARGET_REGION_COUNT</h4>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.68">NORMALIZER_TARGET_REGION_COUNT</a></pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HTableDescriptor.NORMALIZER_TARGET_REGION_COUNT">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="NORMALIZER_TARGET_REGION_SIZE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>NORMALIZER_TARGET_REGION_SIZE</h4>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.70">NORMALIZER_TARGET_REGION_SIZE</a></pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HTableDescriptor.NORMALIZER_TARGET_REGION_SIZE">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
 <a name="PRIORITY">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>PRIORITY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.68">PRIORITY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.72">PRIORITY</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1150,7 +1216,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_READONLY</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.69">DEFAULT_READONLY</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.73">DEFAULT_READONLY</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1164,7 +1230,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_COMPACTION_ENABLED</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.70">DEFAULT_COMPACTION_ENABLED</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.74">DEFAULT_COMPACTION_ENABLED</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1178,7 +1244,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_NORMALIZATION_ENABLED</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.71">DEFAULT_NORMALIZATION_ENABLED</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.75">DEFAULT_NORMALIZATION_ENABLED</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1192,7 +1258,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_MEMSTORE_FLUSH_SIZE</h4>
-<pre>public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.72">DEFAULT_MEMSTORE_FLUSH_SIZE</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.76">DEFAULT_MEMSTORE_FLUSH_SIZE</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1206,7 +1272,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGION_REPLICATION</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.73">DEFAULT_REGION_REPLICATION</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.77">DEFAULT_REGION_REPLICATION</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1220,7 +1286,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGION_MEMSTORE_REPLICATION</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.74">DEFAULT_REGION_MEMSTORE_REPLICATION</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.78">DEFAULT_REGION_MEMSTORE_REPLICATION</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1234,7 +1300,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>delegatee</h4>
-<pre>protected final&nbsp;org.apache.hadoop.hbase.client.TableDescriptorBuilder.ModifyableTableDescriptor <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.75">delegatee</a></pre>
+<pre>protected final&nbsp;org.apache.hadoop.hbase.client.TableDescriptorBuilder.ModifyableTableDescriptor <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.79">delegatee</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </li>
 </ul>
@@ -1244,7 +1310,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>NAMESPACE_FAMILY_INFO</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.782">NAMESPACE_FAMILY_INFO</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.806">NAMESPACE_FAMILY_INFO</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1258,7 +1324,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>NAMESPACE_FAMILY_INFO_BYTES</h4>
-<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.783">NAMESPACE_FAMILY_INFO_BYTES</a></pre>
+<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.807">NAMESPACE_FAMILY_INFO_BYTES</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </li>
 </ul>
@@ -1268,7 +1334,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>NAMESPACE_COL_DESC_BYTES</h4>
-<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.784">NAMESPACE_COL_DESC_BYTES</a></pre>
+<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.808">NAMESPACE_COL_DESC_BYTES</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </li>
 </ul>
@@ -1278,7 +1344,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>NAMESPACE_TABLEDESC</h4>
-<pre>public static final&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.787">NAMESPACE_TABLEDESC</a></pre>
+<pre>public static final&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.811">NAMESPACE_TABLEDESC</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Table descriptor for namespace table</div>
 </li>
@@ -1297,7 +1363,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>HTableDescriptor</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.82">HTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name)</pre>
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.86">HTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Construct a table descriptor specifying a TableName object</div>
 <dl>
@@ -1314,7 +1380,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>HTableDescriptor</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.93">HTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;desc)</pre>
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.97">HTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;desc)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Construct a table descriptor by cloning the descriptor passed as a parameter.
  <p>
@@ -1332,7 +1398,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>HTableDescriptor</h4>
-<pre>protected&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.97">HTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;desc,
+<pre>protected&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.101">HTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;desc,
                            boolean&nbsp;deepClone)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </li>
@@ -1343,7 +1409,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>HTableDescriptor</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.102">HTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.106">HTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </li>
 </ul>
@@ -1353,7 +1419,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>HTableDescriptor</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.115">HTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name,
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.119">HTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name,
                         <a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;desc)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Construct a table descriptor by cloning the descriptor passed as a parameter
@@ -1374,7 +1440,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HTableDescriptor</h4>
-<pre>protected&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.119">HTableDescriptor</a>(org.apache.hadoop.hbase.client.TableDescriptorBuilder.ModifyableTableDescriptor&nbsp;delegatee)</pre>
+<pre>protected&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.123">HTableDescriptor</a>(org.apache.hadoop.hbase.client.TableDescriptorBuilder.ModifyableTableDescriptor&nbsp;delegatee)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </li>
 </ul>
@@ -1392,7 +1458,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>isRootRegion</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.128">isRootRegion</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.132">isRootRegion</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">This is vestigial API. It will be removed in 3.0.</div>
 <dl>
@@ -1407,7 +1473,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>isMetaRegion</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.140">isMetaRegion</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.144">isMetaRegion</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Checks if this table is <code> hbase:meta </code>
  region.</div>
@@ -1426,7 +1492,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>isMetaTable</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.150">isMetaTable</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.154">isMetaTable</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Checks if the table is a <code>hbase:meta</code> table</div>
 <dl>
@@ -1443,7 +1509,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getValues</h4>
-<pre>public&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="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>,<a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.158">getValues</a>()</pre>
+<pre>public&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="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>,<a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.162">getValues</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -1459,7 +1525,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setValue</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.168">setValue</a>(byte[]&nbsp;key,
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.172">setValue</a>(byte[]&nbsp;key,
                                  byte[]&nbsp;value)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Setter for storing metadata as a (key, value) pair in map</div>
@@ -1476,7 +1542,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setValue</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.179">setValue</a>(<a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key,
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.183">setValue</a>(<a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key,
                                  <a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;value)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </li>
@@ -1487,7 +1553,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setValue</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.190">setValue</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;key,
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.194">setValue</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;key,
                                  <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;value)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Setter for storing metadata as a (key, value) pair in map</div>
@@ -1504,7 +1570,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>remove</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.201">remove</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;key)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.205">remove</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;key)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Remove metadata represented by the key from the map</div>
 <dl>
@@ -1520,7 +1586,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>remove</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.211">remove</a>(<a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.215">remove</a>(<a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Remove metadata represented by the key from the map</div>
 <dl>
@@ -1536,7 +1602,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>remove</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.221">remove</a>(byte[]&nbsp;key)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.225">remove</a>(byte[]&nbsp;key)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Remove metadata represented by the key from the map</div>
 <dl>
@@ -1552,7 +1618,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>isReadOnly</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.232">isReadOnly</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.236">isReadOnly</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Check if the readOnly flag of the table is set. If the readOnly flag is
  set then the contents of the table can only be read from but not modified.</div>
@@ -1570,7 +1636,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setReadOnly</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.244">setReadOnly</a>(boolean&nbsp;readOnly)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.248">setReadOnly</a>(boolean&nbsp;readOnly)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Setting the table as read only sets all the columns in the table as read
  only. By default all tables are modifiable, but if the readOnly flag is
@@ -1588,7 +1654,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>isCompactionEnabled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.256">isCompactionEnabled</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.260">isCompactionEnabled</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Check if the compaction enable flag of the table is true. If flag is
  false then no minor/major compactions will be done in real.</div>
@@ -1606,7 +1672,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setCompactionEnabled</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.265">setCompactionEnabled</a>(boolean&nbsp;isEnable)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.269">setCompactionEnabled</a>(boolean&nbsp;isEnable)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Setting the table compaction enable flag.</div>
 <dl>
@@ -1621,7 +1687,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>isNormalizationEnabled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.277">isNormalizationEnabled</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.281">isNormalizationEnabled</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Check if normalization enable flag of the table is true. If flag is
  false then no region normalizer won't attempt to normalize this table.</div>
@@ -1639,7 +1705,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setNormalizationEnabled</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.286">setNormalizationEnabled</a>(boolean&nbsp;isEnable)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.290">setNormalizationEnabled</a>(boolean&nbsp;isEnable)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Setting the table normalization enable flag.</div>
 <dl>
@@ -1648,13 +1714,71 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 </dl>
 </li>
 </ul>
+<a name="getNormalizerTargetRegionCount--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getNormalizerTargetRegionCount</h4>
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.296">getNormalizerTargetRegionCount</a>()</pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getNormalizerTargetRegionCount--">TableDescriptor</a></code></span></div>
+<div class="block">Check if there is the target region count. If so, the normalize plan will
+ be calculated based on the target region count.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getNormalizerTargetRegionCount--">getNormalizerTargetRegionCount</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a></code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>target region count after normalize done</dd>
+</dl>
+</li>
+</ul>
+<a name="setNormalizerTargetRegionCount-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setNormalizerTargetRegionCount</h4>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.300">setNormalizerTargetRegionCount</a>(int&nbsp;regionCount)</pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+</li>
+</ul>
+<a name="getNormalizerTargetRegionSize--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getNormalizerTargetRegionSize</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.306">getNormalizerTargetRegionSize</a>()</pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getNormalizerTargetRegionSize--">TableDescriptor</a></code></span></div>
+<div class="block">Check if there is the target region size. If so, the normalize plan will
+ be calculated based on the target region size.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getNormalizerTargetRegionSize--">getNormalizerTargetRegionSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a></code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>target region size after normalize done</dd>
+</dl>
+</li>
+</ul>
+<a name="setNormalizerTargetRegionSize-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setNormalizerTargetRegionSize</h4>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.310">setNormalizerTargetRegionSize</a>(long&nbsp;regionSize)</pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+</li>
+</ul>
 <a name="setDurability-org.apache.hadoop.hbase.client.Durability-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>setDurability</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.295">setDurability</a>(<a href="../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.319">setDurability</a>(<a href="../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Sets the <a href="../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><code>Durability</code></a> setting for the table. This defaults to Durability.USE_DEFAULT.</div>
 <dl>
@@ -1669,7 +1793,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getDurability</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.305">getDurability</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.329">getDurability</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Returns the durability setting for the table.</div>
 <dl>
@@ -1686,7 +1810,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableName</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.315">getTableName</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.339">getTableName</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Get the name of the table</div>
 <dl>
@@ -1703,7 +1827,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getNameAsString</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/HTableDescriptor.html#line.324">getNameAsString</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/HTableDescriptor.html#line.348">getNameAsString</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Get the name of the table as a String</div>
 <dl>
@@ -1718,7 +1842,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setRegionSplitPolicyClassName</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.334">setRegionSplitPolicyClassName</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;clazz)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.358">setRegionSplitPolicyClassName</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;clazz)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">This sets the class associated with the region split policy which
  determines when a region split should occur.  The class used by
@@ -1735,7 +1859,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionSplitPolicyClassName</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/HTableDescriptor.html#line.348">getRegionSplitPolicyClassName</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/HTableDescriptor.html#line.372">getRegionSplitPolicyClassName</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">This gets the class associated with the region split policy which
  determines when a region split should occur.  The class used by
@@ -1755,7 +1879,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxFileSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.362">getMaxFileSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.386">getMaxFileSize</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Returns the maximum size upto which a region can grow to after which a region
  split is triggered. The region size is represented by the size of the biggest
@@ -1776,7 +1900,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setMaxFileSize</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.381">setMaxFileSize</a>(long&nbsp;maxFileSize)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.405">setMaxFileSize</a>(long&nbsp;maxFileSize)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Sets the maximum size upto which a region can grow to after which a region
  split is triggered. The region size is represented by the size of the biggest
@@ -1801,7 +1925,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getMemStoreFlushSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.394">getMemStoreFlushSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.418">getMemStoreFlushSize</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Returns the size of the memstore after which a flush to filesystem is triggered.</div>
 <dl>
@@ -1820,7 +1944,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setMemStoreFlushSize</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.404">setMemStoreFlushSize</a>(long&nbsp;memstoreFlushSize)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.428">setMemStoreFlushSize</a>(long&nbsp;memstoreFlushSize)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Represents the maximum size of the memstore after which the contents of the
  memstore are flushed to the filesystem. This defaults to a size of 64 MB.</div>
@@ -1836,7 +1960,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setFlushPolicyClassName</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.415">setFlushPolicyClassName</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;clazz)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.439">setFlushPolicyClassName</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;clazz)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">This sets the class associated with the flush policy which determines determines the stores
  need to be flushed when flushing a region. The class used by default is defined in
@@ -1853,7 +1977,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushPolicyClassName</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/HTableDescriptor.html#line.428">getFlushPolicyClassName</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/HTableDescriptor.html#line.452">getFlushPolicyClassName</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">This gets the class associated with the flush policy which determines the stores need to be
  flushed when flushing a region. The class used by default is defined in
@@ -1873,7 +1997,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>addFamily</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.437">addFamily</a>(<a href="../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;family)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.461">addFamily</a>(<a href="../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;family)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Adds a column family.
  For the updating purpose please use <a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#modifyFamily-org.apache.hadoop.hbase.HColumnDescriptor-"><code>modifyFamily(HColumnDescriptor)</code></a> instead.</div>
@@ -1889,7 +2013,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>modifyFamily</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.447">modifyFamily</a>(<a href="../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;family)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.471">modifyFamily</a>(<a href="../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;family)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Modifies the existing column family.</div>
 <dl>
@@ -1906,7 +2030,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>hasFamily</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.457">hasFamily</a>(byte[]&nbsp;familyName)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.481">hasFamily</a>(byte[]&nbsp;familyName)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Checks to see if this table contains the given column family</div>
 <dl>
@@ -1923,7 +2047,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.467">toString</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.491">toString</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -1942,7 +2066,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>toStringCustomizedValues</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/HTableDescriptor.html#line.475">toStringCustomizedValues</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/HTableDescriptor.html#line.499">toStringCustomizedValues</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1957,7 +2081,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>toStringTableAttributes</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/HTableDescriptor.html#line.482">toStringTableAttributes</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/HTableDescriptor.html#line.506">toStringTableAttributes</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1971,7 +2095,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.496">equals</a>(<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>&nbsp;obj)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.520">equals</a>(<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>&nbsp;obj)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Compare the contents of the descriptor with another one passed as a parameter.
  Checks if the obj passed is an instance of HTa

<TRUNCATED>

[16/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/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 3e74a4a..0106e3f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -16,11 +16,11 @@
 <span class="sourceLineNo">008</span>@InterfaceAudience.Private<a name="line.8"></a>
 <span class="sourceLineNo">009</span>public class Version {<a name="line.9"></a>
 <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 = "953e5aa88c992cec213bc57c2db12b78908f357f";<a name="line.11"></a>
+<span class="sourceLineNo">011</span>  public static final String revision = "a07e755625382d3904c935c21a4f240ede6d2f43";<a name="line.11"></a>
 <span class="sourceLineNo">012</span>  public static final String user = "jenkins";<a name="line.12"></a>
-<span class="sourceLineNo">013</span>  public static final String date = "Sun Aug 12 14:39:50 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Mon Aug 13 14:39:43 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 = "918a46246a4ce94897ca837c64052ab9";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "4c556648c6ac0af4fb21141c90f6e2f3";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptor.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptor.html
index 4589cc3..da2617c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptor.html
@@ -269,49 +269,65 @@
 <span class="sourceLineNo">261</span>  boolean isNormalizationEnabled();<a name="line.261"></a>
 <span class="sourceLineNo">262</span><a name="line.262"></a>
 <span class="sourceLineNo">263</span>  /**<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   * Check if the readOnly flag of the table is set. If the readOnly flag is set<a name="line.264"></a>
-<span class="sourceLineNo">265</span>   * then the contents of the table can only be read from but not modified.<a name="line.265"></a>
+<span class="sourceLineNo">264</span>   * Check if there is the target region count. If so, the normalize plan will<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   * be calculated based on the target region count.<a name="line.265"></a>
 <span class="sourceLineNo">266</span>   *<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * @return true if all columns in the table should be read only<a name="line.267"></a>
+<span class="sourceLineNo">267</span>   * @return target region count after normalize done<a name="line.267"></a>
 <span class="sourceLineNo">268</span>   */<a name="line.268"></a>
-<span class="sourceLineNo">269</span>  boolean isReadOnly();<a name="line.269"></a>
+<span class="sourceLineNo">269</span>  int getNormalizerTargetRegionCount();<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>   * Check if any of the table's cfs' replication scope are set to<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   * {@link HConstants#REPLICATION_SCOPE_GLOBAL}.<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * @return {@code true} if we have, otherwise {@code false}.<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  default boolean hasGlobalReplicationScope() {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    return Stream.of(getColumnFamilies())<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      .anyMatch(cf -&gt; cf.getScope() == HConstants.REPLICATION_SCOPE_GLOBAL);<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>  /**<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * Check if the table's cfs' replication scope matched with the replication state<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * @param enabled replication state<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   * @return true if matched, otherwise false<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   */<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  default boolean matchReplicationScope(boolean enabled) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    boolean hasEnabled = false;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    boolean hasDisabled = false;<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span>    for (ColumnFamilyDescriptor cf : getColumnFamilies()) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      if (cf.getScope() != HConstants.REPLICATION_SCOPE_GLOBAL) {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>        hasDisabled = true;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      } else {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        hasEnabled = true;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      }<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>    if (hasEnabled &amp;&amp; hasDisabled) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      return false;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    if (hasEnabled) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      return enabled;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    return !enabled;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  }<a name="line.305"></a>
-<span class="sourceLineNo">306</span>}<a name="line.306"></a>
+<span class="sourceLineNo">272</span>   * Check if there is the target region size. If so, the normalize plan will<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   * be calculated based on the target region size.<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   *<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * @return target region size after normalize done<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   */<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  long getNormalizerTargetRegionSize();<a name="line.277"></a>
+<span class="sourceLineNo">278</span><a name="line.278"></a>
+<span class="sourceLineNo">279</span>  /**<a name="line.279"></a>
+<span class="sourceLineNo">280</span>   * Check if the readOnly flag of the table is set. If the readOnly flag is set<a name="line.280"></a>
+<span class="sourceLineNo">281</span>   * then the contents of the table can only be read from but not modified.<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   *<a name="line.282"></a>
+<span class="sourceLineNo">283</span>   * @return true if all columns in the table should be read only<a name="line.283"></a>
+<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  boolean isReadOnly();<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span>  /**<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * Check if any of the table's cfs' replication scope are set to<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   * {@link HConstants#REPLICATION_SCOPE_GLOBAL}.<a name="line.289"></a>
+<span class="sourceLineNo">290</span>   * @return {@code true} if we have, otherwise {@code false}.<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   */<a name="line.291"></a>
+<span class="sourceLineNo">292</span>  default boolean hasGlobalReplicationScope() {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    return Stream.of(getColumnFamilies())<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      .anyMatch(cf -&gt; cf.getScope() == HConstants.REPLICATION_SCOPE_GLOBAL);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
+<span class="sourceLineNo">296</span><a name="line.296"></a>
+<span class="sourceLineNo">297</span>  /**<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   * Check if the table's cfs' replication scope matched with the replication state<a name="line.298"></a>
+<span class="sourceLineNo">299</span>   * @param enabled replication state<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * @return true if matched, otherwise false<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   */<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  default boolean matchReplicationScope(boolean enabled) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    boolean hasEnabled = false;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    boolean hasDisabled = false;<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span>    for (ColumnFamilyDescriptor cf : getColumnFamilies()) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      if (cf.getScope() != HConstants.REPLICATION_SCOPE_GLOBAL) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        hasDisabled = true;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      } else {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        hasEnabled = true;<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>    if (hasEnabled &amp;&amp; hasDisabled) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      return false;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    if (hasEnabled) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      return enabled;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    return !enabled;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>}<a name="line.322"></a>
 
 
 


[23/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/org/apache/hadoop/hbase/HTableDescriptor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/HTableDescriptor.html b/devapidocs/org/apache/hadoop/hbase/HTableDescriptor.html
index 6fdbe65..ba041a3 100644
--- a/devapidocs/org/apache/hadoop/hbase/HTableDescriptor.html
+++ b/devapidocs/org/apache/hadoop/hbase/HTableDescriptor.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":42,"i1":42,"i2":42,"i3":42,"i4":42,"i5":42,"i6":42,"i7":42,"i8":42,"i9":42,"i10":42,"i11":42,"i12":42,"i13":42,"i14":42,"i15":42,"i16":42,"i17":42,"i18":42,"i19":42,"i20":42,"i21":42,"i22":42,"i23":42,"i24":42,"i25":42,"i26":42,"i27":42,"i28":42,"i29":42,"i30":42,"i31":42,"i32":42,"i33":42,"i34":42,"i35":42,"i36":42,"i37":42,"i38":42,"i39":42,"i40":42,"i41":42,"i42":42,"i43":42,"i44":42,"i45":41,"i46":42,"i47":42,"i48":42,"i49":42,"i50":42,"i51":42,"i52":42,"i53":42,"i54":42,"i55":42,"i56":42,"i57":42,"i58":42,"i59":42,"i60":42,"i61":42,"i62":42,"i63":42,"i64":42,"i65":42,"i66":42,"i67":42,"i68":42,"i69":42,"i70":42,"i71":42,"i72":42,"i73":42,"i74":42};
+var methods = {"i0":42,"i1":42,"i2":42,"i3":42,"i4":42,"i5":42,"i6":42,"i7":42,"i8":42,"i9":42,"i10":42,"i11":42,"i12":42,"i13":42,"i14":42,"i15":42,"i16":42,"i17":42,"i18":42,"i19":42,"i20":42,"i21":42,"i22":42,"i23":42,"i24":42,"i25":42,"i26":42,"i27":42,"i28":42,"i29":42,"i30":42,"i31":42,"i32":42,"i33":42,"i34":42,"i35":42,"i36":42,"i37":42,"i38":42,"i39":42,"i40":42,"i41":42,"i42":42,"i43":42,"i44":42,"i45":42,"i46":42,"i47":41,"i48":42,"i49":42,"i50":42,"i51":42,"i52":42,"i53":42,"i54":42,"i55":42,"i56":42,"i57":42,"i58":42,"i59":42,"i60":42,"i61":42,"i62":42,"i63":42,"i64":42,"i65":42,"i66":42,"i67":42,"i68":42,"i69":42,"i70":42,"i71":42,"i72":42,"i73":42,"i74":42,"i75":42,"i76":42,"i77":42,"i78":42};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -265,6 +265,18 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <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 class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#NORMALIZER_TARGET_REGION_COUNT">NORMALIZER_TARGET_REGION_COUNT</a></span></code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <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 class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#NORMALIZER_TARGET_REGION_SIZE">NORMALIZER_TARGET_REGION_SIZE</a></span></code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <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 class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#OWNER">OWNER</a></span></code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
@@ -555,25 +567,39 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 </td>
 </tr>
 <tr id="i23" class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getNormalizerTargetRegionCount--">getNormalizerTargetRegionCount</a></span>()</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<div class="block">Check if there is the target region count.</div>
+</td>
+</tr>
+<tr id="i24" class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getNormalizerTargetRegionSize--">getNormalizerTargetRegionSize</a></span>()</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<div class="block">Check if there is the target region size.</div>
+</td>
+</tr>
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code><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 class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getOwnerString--">getOwnerString</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getPriority--">getPriority</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr id="i25" class="rowColor">
+<tr id="i27" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getRegionReplication--">getRegionReplication</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Returns the configured replicas per region</div>
 </td>
 </tr>
-<tr id="i26" class="altColor">
+<tr id="i28" class="altColor">
 <td class="colFirst"><code><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 class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getRegionSplitPolicyClassName--">getRegionSplitPolicyClassName</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
@@ -581,68 +607,68 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
  determines when a region split should occur.</div>
 </td>
 </tr>
-<tr id="i27" class="rowColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getTableName--">getTableName</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Get the name of the table</div>
 </td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code>byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getValue-byte:A-">getValue</a></span>(byte[]&nbsp;key)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Getter for accessing the metadata associated with the key.</div>
 </td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getValue-org.apache.hadoop.hbase.util.Bytes-">getValue</a></span>(<a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Getter for accessing the metadata associated with the key.</div>
 </td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code><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 class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getValue-java.lang.String-">getValue</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Getter for accessing the metadata associated with the key.</div>
 </td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>,<a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getValues--">getValues</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#hasColumnFamily-byte:A-">hasColumnFamily</a></span>(byte[]&nbsp;name)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Checks to see if this table contains the given column family</div>
 </td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#hasCoprocessor-java.lang.String-">hasCoprocessor</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;classNameToMatch)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Check if the table has an attached co-processor represented by the name className</div>
 </td>
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#hasFamily-byte:A-">hasFamily</a></span>(byte[]&nbsp;familyName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Checks to see if this table contains the given column family</div>
 </td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#hashCode--">hashCode</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i38" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#hasRegionMemstoreReplication--">hasRegionMemstoreReplication</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -651,20 +677,20 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 </div>
 </td>
 </tr>
-<tr id="i37" class="rowColor">
+<tr id="i39" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#hasRegionMemStoreReplication--">hasRegionMemStoreReplication</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr id="i38" class="altColor">
+<tr id="i40" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#isCompactionEnabled--">isCompactionEnabled</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Check if the compaction enable flag of the table is true.</div>
 </td>
 </tr>
-<tr id="i39" class="rowColor">
+<tr id="i41" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#isMetaRegion--">isMetaRegion</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
@@ -672,83 +698,83 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
  region.</div>
 </td>
 </tr>
-<tr id="i40" class="altColor">
+<tr id="i42" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#isMetaTable--">isMetaTable</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Checks if the table is a <code>hbase:meta</code> table</div>
 </td>
 </tr>
-<tr id="i41" class="rowColor">
+<tr id="i43" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#isNormalizationEnabled--">isNormalizationEnabled</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Check if normalization enable flag of the table is true.</div>
 </td>
 </tr>
-<tr id="i42" class="altColor">
+<tr id="i44" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#isReadOnly--">isReadOnly</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Check if the readOnly flag of the table is set.</div>
 </td>
 </tr>
-<tr id="i43" class="rowColor">
+<tr id="i45" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#isRootRegion--">isRootRegion</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">This is vestigial API.</div>
 </td>
 </tr>
-<tr id="i44" class="altColor">
+<tr id="i46" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#modifyFamily-org.apache.hadoop.hbase.HColumnDescriptor-">modifyFamily</a></span>(<a href="../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;family)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Modifies the existing column family.</div>
 </td>
 </tr>
-<tr id="i45" class="rowColor">
+<tr id="i47" class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#parseFrom-byte:A-">parseFrom</a></span>(byte[]&nbsp;bytes)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr id="i46" class="altColor">
+<tr id="i48" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#remove-byte:A-">remove</a></span>(byte[]&nbsp;key)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Remove metadata represented by the key from the map</div>
 </td>
 </tr>
-<tr id="i47" class="rowColor">
+<tr id="i49" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#remove-org.apache.hadoop.hbase.util.Bytes-">remove</a></span>(<a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Remove metadata represented by the key from the map</div>
 </td>
 </tr>
-<tr id="i48" class="altColor">
+<tr id="i50" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#remove-java.lang.String-">remove</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Remove metadata represented by the key from the map</div>
 </td>
 </tr>
-<tr id="i49" class="rowColor">
+<tr id="i51" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#removeConfiguration-java.lang.String-">removeConfiguration</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Remove a config setting represented by the key from the map</div>
 </td>
 </tr>
-<tr id="i50" class="altColor">
+<tr id="i52" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#removeCoprocessor-java.lang.String-">removeCoprocessor</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;className)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Remove a coprocessor from those set on the table</div>
 </td>
 </tr>
-<tr id="i51" class="rowColor">
+<tr id="i53" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#removeFamily-byte:A-">removeFamily</a></span>(byte[]&nbsp;column)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
@@ -756,14 +782,14 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
  from the table descriptor</div>
 </td>
 </tr>
-<tr id="i52" class="altColor">
+<tr id="i54" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setCompactionEnabled-boolean-">setCompactionEnabled</a></span>(boolean&nbsp;isEnable)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Setting the table compaction enable flag.</div>
 </td>
 </tr>
-<tr id="i53" class="rowColor">
+<tr id="i55" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setConfiguration-java.lang.String-java.lang.String-">setConfiguration</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key,
                 <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;value)</code>
@@ -771,14 +797,14 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <div class="block">Setter for storing a configuration setting in map.</div>
 </td>
 </tr>
-<tr id="i54" class="altColor">
+<tr id="i56" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setDurability-org.apache.hadoop.hbase.client.Durability-">setDurability</a></span>(<a href="../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Sets the <a href="../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><code>Durability</code></a> setting for the table.</div>
 </td>
 </tr>
-<tr id="i55" class="rowColor">
+<tr id="i57" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setFlushPolicyClassName-java.lang.String-">setFlushPolicyClassName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;clazz)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
@@ -786,7 +812,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
  need to be flushed when flushing a region.</div>
 </td>
 </tr>
-<tr id="i56" class="altColor">
+<tr id="i58" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setMaxFileSize-long-">setMaxFileSize</a></span>(long&nbsp;maxFileSize)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
@@ -794,7 +820,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
  split is triggered.</div>
 </td>
 </tr>
-<tr id="i57" class="rowColor">
+<tr id="i59" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setMemStoreFlushSize-long-">setMemStoreFlushSize</a></span>(long&nbsp;memstoreFlushSize)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
@@ -802,32 +828,44 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
  memstore are flushed to the filesystem.</div>
 </td>
 </tr>
-<tr id="i58" class="altColor">
+<tr id="i60" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setNormalizationEnabled-boolean-">setNormalizationEnabled</a></span>(boolean&nbsp;isEnable)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Setting the table normalization enable flag.</div>
 </td>
 </tr>
-<tr id="i59" class="rowColor">
+<tr id="i61" class="rowColor">
+<td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setNormalizerTargetRegionCount-int-">setNormalizerTargetRegionCount</a></span>(int&nbsp;regionCount)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+&nbsp;</td>
+</tr>
+<tr id="i62" class="altColor">
+<td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setNormalizerTargetRegionSize-long-">setNormalizerTargetRegionSize</a></span>(long&nbsp;regionSize)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+&nbsp;</td>
+</tr>
+<tr id="i63" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setOwner-org.apache.hadoop.hbase.security.User-">setOwner</a></span>(<a href="../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;owner)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>
 </tr>
-<tr id="i60" class="altColor">
+<tr id="i64" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setOwnerString-java.lang.String-">setOwnerString</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;ownerString)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>
 </tr>
-<tr id="i61" class="rowColor">
+<tr id="i65" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setPriority-int-">setPriority</a></span>(int&nbsp;priority)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr id="i62" class="altColor">
+<tr id="i66" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setReadOnly-boolean-">setReadOnly</a></span>(boolean&nbsp;readOnly)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
@@ -835,7 +873,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
  only.</div>
 </td>
 </tr>
-<tr id="i63" class="rowColor">
+<tr id="i67" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setRegionMemstoreReplication-boolean-">setRegionMemstoreReplication</a></span>(boolean&nbsp;memstoreReplication)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -844,21 +882,21 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 </div>
 </td>
 </tr>
-<tr id="i64" class="altColor">
+<tr id="i68" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setRegionMemStoreReplication-boolean-">setRegionMemStoreReplication</a></span>(boolean&nbsp;memstoreReplication)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Enable or Disable the memstore replication from the primary region to the replicas.</div>
 </td>
 </tr>
-<tr id="i65" class="rowColor">
+<tr id="i69" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setRegionReplication-int-">setRegionReplication</a></span>(int&nbsp;regionReplication)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Sets the number of replicas per region.</div>
 </td>
 </tr>
-<tr id="i66" class="altColor">
+<tr id="i70" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setRegionSplitPolicyClassName-java.lang.String-">setRegionSplitPolicyClassName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;clazz)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
@@ -866,7 +904,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
  determines when a region split should occur.</div>
 </td>
 </tr>
-<tr id="i67" class="rowColor">
+<tr id="i71" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setValue-byte:A-byte:A-">setValue</a></span>(byte[]&nbsp;key,
         byte[]&nbsp;value)</code>
@@ -874,14 +912,14 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <div class="block">Setter for storing metadata as a (key, value) pair in map</div>
 </td>
 </tr>
-<tr id="i68" class="altColor">
+<tr id="i72" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setValue-org.apache.hadoop.hbase.util.Bytes-org.apache.hadoop.hbase.util.Bytes-">setValue</a></span>(<a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key,
         <a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;value)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr id="i69" class="rowColor">
+<tr id="i73" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setValue-java.lang.String-java.lang.String-">setValue</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key,
         <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;value)</code>
@@ -889,32 +927,32 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <div class="block">Setter for storing metadata as a (key, value) pair in map</div>
 </td>
 </tr>
-<tr id="i70" class="altColor">
+<tr id="i74" class="altColor">
 <td class="colFirst"><code>byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#toByteArray--">toByteArray</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr id="i71" class="rowColor">
+<tr id="i75" class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#toHColumnDescriptor-org.apache.hadoop.hbase.client.ColumnFamilyDescriptor-">toHColumnDescriptor</a></span>(<a href="../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;desc)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Return a HColumnDescriptor for user to keep the compatibility as much as possible.</div>
 </td>
 </tr>
-<tr id="i72" class="altColor">
+<tr id="i76" class="altColor">
 <td class="colFirst"><code><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 class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#toString--">toString</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr id="i73" class="rowColor">
+<tr id="i77" class="rowColor">
 <td class="colFirst"><code><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 class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#toStringCustomizedValues--">toStringCustomizedValues</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr id="i74" class="altColor">
+<tr id="i78" class="altColor">
 <td class="colFirst"><code><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 class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#toStringTableAttributes--">toStringTableAttributes</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
@@ -1141,13 +1179,41 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 </dl>
 </li>
 </ul>
+<a name="NORMALIZER_TARGET_REGION_COUNT">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>NORMALIZER_TARGET_REGION_COUNT</h4>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.68">NORMALIZER_TARGET_REGION_COUNT</a></pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HTableDescriptor.NORMALIZER_TARGET_REGION_COUNT">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="NORMALIZER_TARGET_REGION_SIZE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>NORMALIZER_TARGET_REGION_SIZE</h4>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.70">NORMALIZER_TARGET_REGION_SIZE</a></pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HTableDescriptor.NORMALIZER_TARGET_REGION_SIZE">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
 <a name="PRIORITY">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>PRIORITY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.68">PRIORITY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.72">PRIORITY</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1161,7 +1227,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_READONLY</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.69">DEFAULT_READONLY</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.73">DEFAULT_READONLY</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1175,7 +1241,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_COMPACTION_ENABLED</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.70">DEFAULT_COMPACTION_ENABLED</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.74">DEFAULT_COMPACTION_ENABLED</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1189,7 +1255,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_NORMALIZATION_ENABLED</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.71">DEFAULT_NORMALIZATION_ENABLED</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.75">DEFAULT_NORMALIZATION_ENABLED</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1203,7 +1269,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_MEMSTORE_FLUSH_SIZE</h4>
-<pre>public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.72">DEFAULT_MEMSTORE_FLUSH_SIZE</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.76">DEFAULT_MEMSTORE_FLUSH_SIZE</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1217,7 +1283,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGION_REPLICATION</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.73">DEFAULT_REGION_REPLICATION</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.77">DEFAULT_REGION_REPLICATION</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1231,7 +1297,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGION_MEMSTORE_REPLICATION</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.74">DEFAULT_REGION_MEMSTORE_REPLICATION</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.78">DEFAULT_REGION_MEMSTORE_REPLICATION</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1245,7 +1311,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>delegatee</h4>
-<pre>protected final&nbsp;<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.75">delegatee</a></pre>
+<pre>protected final&nbsp;<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.79">delegatee</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </li>
 </ul>
@@ -1255,7 +1321,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>NAMESPACE_FAMILY_INFO</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.782">NAMESPACE_FAMILY_INFO</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.806">NAMESPACE_FAMILY_INFO</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1269,7 +1335,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>NAMESPACE_FAMILY_INFO_BYTES</h4>
-<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.783">NAMESPACE_FAMILY_INFO_BYTES</a></pre>
+<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.807">NAMESPACE_FAMILY_INFO_BYTES</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </li>
 </ul>
@@ -1279,7 +1345,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>NAMESPACE_COL_DESC_BYTES</h4>
-<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.784">NAMESPACE_COL_DESC_BYTES</a></pre>
+<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.808">NAMESPACE_COL_DESC_BYTES</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </li>
 </ul>
@@ -1289,7 +1355,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>NAMESPACE_TABLEDESC</h4>
-<pre>public static final&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.787">NAMESPACE_TABLEDESC</a></pre>
+<pre>public static final&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.811">NAMESPACE_TABLEDESC</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Table descriptor for namespace table</div>
 </li>
@@ -1308,7 +1374,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>HTableDescriptor</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.82">HTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name)</pre>
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.86">HTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Construct a table descriptor specifying a TableName object</div>
 <dl>
@@ -1325,7 +1391,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>HTableDescriptor</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.93">HTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;desc)</pre>
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.97">HTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;desc)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Construct a table descriptor by cloning the descriptor passed as a parameter.
  <p>
@@ -1343,7 +1409,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>HTableDescriptor</h4>
-<pre>protected&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.97">HTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;desc,
+<pre>protected&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.101">HTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;desc,
                            boolean&nbsp;deepClone)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </li>
@@ -1354,7 +1420,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>HTableDescriptor</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.102">HTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.106">HTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </li>
 </ul>
@@ -1364,7 +1430,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>HTableDescriptor</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.115">HTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name,
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.119">HTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name,
                         <a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;desc)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Construct a table descriptor by cloning the descriptor passed as a parameter
@@ -1385,7 +1451,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HTableDescriptor</h4>
-<pre>protected&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.119">HTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;delegatee)</pre>
+<pre>protected&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.123">HTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;delegatee)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </li>
 </ul>
@@ -1403,7 +1469,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>isRootRegion</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.128">isRootRegion</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.132">isRootRegion</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">This is vestigial API. It will be removed in 3.0.</div>
 <dl>
@@ -1418,7 +1484,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>isMetaRegion</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.140">isMetaRegion</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.144">isMetaRegion</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Checks if this table is <code> hbase:meta </code>
  region.</div>
@@ -1437,7 +1503,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>isMetaTable</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.150">isMetaTable</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.154">isMetaTable</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Checks if the table is a <code>hbase:meta</code> table</div>
 <dl>
@@ -1454,7 +1520,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getValues</h4>
-<pre>public&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="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>,<a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.158">getValues</a>()</pre>
+<pre>public&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="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>,<a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.162">getValues</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -1470,7 +1536,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setValue</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.168">setValue</a>(byte[]&nbsp;key,
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.172">setValue</a>(byte[]&nbsp;key,
                                  byte[]&nbsp;value)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Setter for storing metadata as a (key, value) pair in map</div>
@@ -1487,7 +1553,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setValue</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.179">setValue</a>(<a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key,
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.183">setValue</a>(<a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key,
                                  <a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;value)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </li>
@@ -1498,7 +1564,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setValue</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.190">setValue</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;key,
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.194">setValue</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;key,
                                  <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;value)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Setter for storing metadata as a (key, value) pair in map</div>
@@ -1515,7 +1581,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>remove</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.201">remove</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;key)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.205">remove</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;key)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Remove metadata represented by the key from the map</div>
 <dl>
@@ -1531,7 +1597,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>remove</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.211">remove</a>(<a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.215">remove</a>(<a href="../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Remove metadata represented by the key from the map</div>
 <dl>
@@ -1547,7 +1613,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>remove</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.221">remove</a>(byte[]&nbsp;key)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.225">remove</a>(byte[]&nbsp;key)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Remove metadata represented by the key from the map</div>
 <dl>
@@ -1563,7 +1629,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>isReadOnly</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.232">isReadOnly</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.236">isReadOnly</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Check if the readOnly flag of the table is set. If the readOnly flag is
  set then the contents of the table can only be read from but not modified.</div>
@@ -1581,7 +1647,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setReadOnly</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.244">setReadOnly</a>(boolean&nbsp;readOnly)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.248">setReadOnly</a>(boolean&nbsp;readOnly)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Setting the table as read only sets all the columns in the table as read
  only. By default all tables are modifiable, but if the readOnly flag is
@@ -1599,7 +1665,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>isCompactionEnabled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.256">isCompactionEnabled</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.260">isCompactionEnabled</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Check if the compaction enable flag of the table is true. If flag is
  false then no minor/major compactions will be done in real.</div>
@@ -1617,7 +1683,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setCompactionEnabled</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.265">setCompactionEnabled</a>(boolean&nbsp;isEnable)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.269">setCompactionEnabled</a>(boolean&nbsp;isEnable)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Setting the table compaction enable flag.</div>
 <dl>
@@ -1632,7 +1698,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>isNormalizationEnabled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.277">isNormalizationEnabled</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.281">isNormalizationEnabled</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Check if normalization enable flag of the table is true. If flag is
  false then no region normalizer won't attempt to normalize this table.</div>
@@ -1650,7 +1716,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setNormalizationEnabled</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.286">setNormalizationEnabled</a>(boolean&nbsp;isEnable)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.290">setNormalizationEnabled</a>(boolean&nbsp;isEnable)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Setting the table normalization enable flag.</div>
 <dl>
@@ -1659,13 +1725,71 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 </dl>
 </li>
 </ul>
+<a name="getNormalizerTargetRegionCount--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getNormalizerTargetRegionCount</h4>
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.296">getNormalizerTargetRegionCount</a>()</pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getNormalizerTargetRegionCount--">TableDescriptor</a></code></span></div>
+<div class="block">Check if there is the target region count. If so, the normalize plan will
+ be calculated based on the target region count.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getNormalizerTargetRegionCount--">getNormalizerTargetRegionCount</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a></code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>target region count after normalize done</dd>
+</dl>
+</li>
+</ul>
+<a name="setNormalizerTargetRegionCount-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setNormalizerTargetRegionCount</h4>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.300">setNormalizerTargetRegionCount</a>(int&nbsp;regionCount)</pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+</li>
+</ul>
+<a name="getNormalizerTargetRegionSize--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getNormalizerTargetRegionSize</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.306">getNormalizerTargetRegionSize</a>()</pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getNormalizerTargetRegionSize--">TableDescriptor</a></code></span></div>
+<div class="block">Check if there is the target region size. If so, the normalize plan will
+ be calculated based on the target region size.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getNormalizerTargetRegionSize--">getNormalizerTargetRegionSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a></code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>target region size after normalize done</dd>
+</dl>
+</li>
+</ul>
+<a name="setNormalizerTargetRegionSize-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setNormalizerTargetRegionSize</h4>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.310">setNormalizerTargetRegionSize</a>(long&nbsp;regionSize)</pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+</li>
+</ul>
 <a name="setDurability-org.apache.hadoop.hbase.client.Durability-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>setDurability</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.295">setDurability</a>(<a href="../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.319">setDurability</a>(<a href="../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Sets the <a href="../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><code>Durability</code></a> setting for the table. This defaults to Durability.USE_DEFAULT.</div>
 <dl>
@@ -1680,7 +1804,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getDurability</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.305">getDurability</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.329">getDurability</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Returns the durability setting for the table.</div>
 <dl>
@@ -1697,7 +1821,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableName</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.315">getTableName</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.339">getTableName</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Get the name of the table</div>
 <dl>
@@ -1714,7 +1838,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getNameAsString</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/HTableDescriptor.html#line.324">getNameAsString</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/HTableDescriptor.html#line.348">getNameAsString</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Get the name of the table as a String</div>
 <dl>
@@ -1729,7 +1853,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setRegionSplitPolicyClassName</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.334">setRegionSplitPolicyClassName</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;clazz)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.358">setRegionSplitPolicyClassName</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;clazz)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">This sets the class associated with the region split policy which
  determines when a region split should occur.  The class used by
@@ -1746,7 +1870,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionSplitPolicyClassName</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/HTableDescriptor.html#line.348">getRegionSplitPolicyClassName</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/HTableDescriptor.html#line.372">getRegionSplitPolicyClassName</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">This gets the class associated with the region split policy which
  determines when a region split should occur.  The class used by
@@ -1766,7 +1890,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxFileSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.362">getMaxFileSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.386">getMaxFileSize</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Returns the maximum size upto which a region can grow to after which a region
  split is triggered. The region size is represented by the size of the biggest
@@ -1787,7 +1911,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setMaxFileSize</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.381">setMaxFileSize</a>(long&nbsp;maxFileSize)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.405">setMaxFileSize</a>(long&nbsp;maxFileSize)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Sets the maximum size upto which a region can grow to after which a region
  split is triggered. The region size is represented by the size of the biggest
@@ -1812,7 +1936,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getMemStoreFlushSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.394">getMemStoreFlushSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.418">getMemStoreFlushSize</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Returns the size of the memstore after which a flush to filesystem is triggered.</div>
 <dl>
@@ -1831,7 +1955,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setMemStoreFlushSize</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.404">setMemStoreFlushSize</a>(long&nbsp;memstoreFlushSize)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.428">setMemStoreFlushSize</a>(long&nbsp;memstoreFlushSize)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Represents the maximum size of the memstore after which the contents of the
  memstore are flushed to the filesystem. This defaults to a size of 64 MB.</div>
@@ -1847,7 +1971,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setFlushPolicyClassName</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.415">setFlushPolicyClassName</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;clazz)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.439">setFlushPolicyClassName</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;clazz)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">This sets the class associated with the flush policy which determines determines the stores
  need to be flushed when flushing a region. The class used by default is defined in
@@ -1864,7 +1988,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushPolicyClassName</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/HTableDescriptor.html#line.428">getFlushPolicyClassName</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/HTableDescriptor.html#line.452">getFlushPolicyClassName</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">This gets the class associated with the flush policy which determines the stores need to be
  flushed when flushing a region. The class used by default is defined in
@@ -1884,7 +2008,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>addFamily</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.437">addFamily</a>(<a href="../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;family)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.461">addFamily</a>(<a href="../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;family)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Adds a column family.
  For the updating purpose please use <a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html#modifyFamily-org.apache.hadoop.hbase.HColumnDescriptor-"><code>modifyFamily(HColumnDescriptor)</code></a> instead.</div>
@@ -1900,7 +2024,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>modifyFamily</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.447">modifyFamily</a>(<a href="../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;family)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.471">modifyFamily</a>(<a href="../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;family)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Modifies the existing column family.</div>
 <dl>
@@ -1917,7 +2041,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>hasFamily</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.457">hasFamily</a>(byte[]&nbsp;familyName)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.481">hasFamily</a>(byte[]&nbsp;familyName)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Checks to see if this table contains the given column family</div>
 <dl>
@@ -1934,7 +2058,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.467">toString</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.491">toString</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -1953,7 +2077,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>toStringCustomizedValues</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/HTableDescriptor.html#line.475">toStringCustomizedValues</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/HTableDescriptor.html#line.499">toStringCustomizedValues</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1968,7 +2092,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>toStringTableAttributes</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/HTableDescriptor.html#line.482">toStringTableAttributes</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/HTableDescriptor.html#line.506">toStringTableAttributes</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1982,7 +2106,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.h
 <ul class="blockList">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HTableDescriptor.html#line.496">equals</a>(<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>&nbs

<TRUNCATED>

[11/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html
index 9c54904..0a656db 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html
@@ -1371,589 +1371,581 @@
 <span class="sourceLineNo">1363</span>    assert subprocStack != null : "Called rollback with no steps executed rootProc=" + rootProc;<a name="line.1363"></a>
 <span class="sourceLineNo">1364</span><a name="line.1364"></a>
 <span class="sourceLineNo">1365</span>    int stackTail = subprocStack.size();<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>    boolean reuseLock = false;<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>    while (stackTail --&gt; 0) {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>      Procedure&lt;TEnvironment&gt; proc = subprocStack.get(stackTail);<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span><a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>      LockState lockState;<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>      if (!reuseLock &amp;&amp; (lockState = acquireLock(proc)) != LockState.LOCK_ACQUIRED) {<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>        // can't take a lock on the procedure, add the root-proc back on the<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>        // queue waiting for the lock availability<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>        return lockState;<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>      }<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span><a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      lockState = executeRollback(proc);<a name="line.1377"></a>
+<span class="sourceLineNo">1366</span>    while (stackTail-- &gt; 0) {<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>      Procedure&lt;TEnvironment&gt; proc = subprocStack.get(stackTail);<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span><a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>      LockState lockState = acquireLock(proc);<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>      if (lockState != LockState.LOCK_ACQUIRED) {<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>        // can't take a lock on the procedure, add the root-proc back on the<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>        // queue waiting for the lock availability<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>        return lockState;<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>      }<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span><a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>      lockState = executeRollback(proc);<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      releaseLock(proc, false);<a name="line.1377"></a>
 <span class="sourceLineNo">1378</span>      boolean abortRollback = lockState != LockState.LOCK_ACQUIRED;<a name="line.1378"></a>
 <span class="sourceLineNo">1379</span>      abortRollback |= !isRunning() || !store.isRunning();<a name="line.1379"></a>
 <span class="sourceLineNo">1380</span><a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      // If the next procedure is the same to this one<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      // (e.g. StateMachineProcedure reuse the same instance)<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      // we can avoid to lock/unlock each step<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>      reuseLock = stackTail &gt; 0 &amp;&amp; (subprocStack.get(stackTail - 1) == proc) &amp;&amp; !abortRollback;<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>      if (!reuseLock &amp;&amp; proc.hasLock()) {<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        releaseLock(proc, false);<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>      }<a name="line.1387"></a>
+<span class="sourceLineNo">1381</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      // useful to test the procedure recovery.<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>      if (abortRollback) {<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>        return lockState;<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>      }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span><a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>      subprocStack.remove(stackTail);<a name="line.1387"></a>
 <span class="sourceLineNo">1388</span><a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>      // useful to test the procedure recovery.<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      if (abortRollback) {<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>        return lockState;<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>      }<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span><a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>      subprocStack.remove(stackTail);<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span><a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>      if (proc.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>        return LockState.LOCK_YIELD_WAIT;<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>      }<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span><a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>      if (proc != rootProc) {<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>        execCompletionCleanup(proc);<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      }<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>    }<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span><a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    // Finalize the procedure state<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>    LOG.info("Rolled back " + rootProc +<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>             " exec-time=" + StringUtils.humanTimeDiff(rootProc.elapsedTime()));<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>    procedureFinished(rootProc);<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>    return LockState.LOCK_ACQUIRED;<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>  }<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span><a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>  /**<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>   * Execute the rollback of the procedure step.<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>   * It updates the store with the new state (stack index)<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>   * or will remove completly the procedure in case it is a child.<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>   */<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>  private LockState executeRollback(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>    try {<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>      proc.doRollback(getEnvironment());<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>    } catch (IOException e) {<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>      LOG.debug("Roll back attempt failed for {}", proc, e);<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>    } catch (InterruptedException e) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>      handleInterruptedException(proc, e);<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>    } catch (Throwable e) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>      LOG.error(HBaseMarkers.FATAL, "CODE-BUG: Uncaught runtime exception for " + proc, e);<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>    }<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span><a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>    // allows to kill the executor before something is stored to the wal.<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>    // useful to test the procedure recovery.<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>    if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate()) {<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>      String msg = "TESTING: Kill before store update";<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>      LOG.debug(msg);<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      stop();<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>      throw new RuntimeException(msg);<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    }<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span><a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>    if (proc.removeStackIndex()) {<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      proc.setState(ProcedureState.ROLLEDBACK);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span><a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      // update metrics on finishing the procedure (fail)<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>      proc.updateMetricsOnFinish(getEnvironment(), proc.elapsedTime(), false);<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span><a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>      if (proc.hasParent()) {<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>        store.delete(proc.getProcId());<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>        procedures.remove(proc.getProcId());<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      } else {<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>        final long[] childProcIds = rollbackStack.get(proc.getProcId()).getSubprocedureIds();<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>        if (childProcIds != null) {<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>          store.delete(proc, childProcIds);<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>        } else {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>          store.update(proc);<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>        }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      }<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>    } else {<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>      store.update(proc);<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    }<a name="line.1461"></a>
+<span class="sourceLineNo">1389</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>      if (proc.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        return LockState.LOCK_YIELD_WAIT;<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span><a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      if (proc != rootProc) {<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>        execCompletionCleanup(proc);<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>      }<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>    }<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span><a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>    // Finalize the procedure state<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>    LOG.info("Rolled back " + rootProc +<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>             " exec-time=" + StringUtils.humanTimeDiff(rootProc.elapsedTime()));<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>    procedureFinished(rootProc);<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>    return LockState.LOCK_ACQUIRED;<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>  }<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span><a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>  /**<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>   * Execute the rollback of the procedure step.<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>   * It updates the store with the new state (stack index)<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>   * or will remove completly the procedure in case it is a child.<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>   */<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>  private LockState executeRollback(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>    try {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>      proc.doRollback(getEnvironment());<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>    } catch (IOException e) {<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      LOG.debug("Roll back attempt failed for {}", proc, e);<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>    } catch (InterruptedException e) {<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>      handleInterruptedException(proc, e);<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>    } catch (Throwable e) {<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>      LOG.error(HBaseMarkers.FATAL, "CODE-BUG: Uncaught runtime exception for " + proc, e);<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>    }<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span><a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>    // allows to kill the executor before something is stored to the wal.<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    // useful to test the procedure recovery.<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>    if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate()) {<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>      String msg = "TESTING: Kill before store update";<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      LOG.debug(msg);<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      stop();<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>      throw new RuntimeException(msg);<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>    }<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span><a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>    if (proc.removeStackIndex()) {<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>      proc.setState(ProcedureState.ROLLEDBACK);<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span><a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>      // update metrics on finishing the procedure (fail)<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>      proc.updateMetricsOnFinish(getEnvironment(), proc.elapsedTime(), false);<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span><a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>      if (proc.hasParent()) {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>        store.delete(proc.getProcId());<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>        procedures.remove(proc.getProcId());<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      } else {<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>        final long[] childProcIds = rollbackStack.get(proc.getProcId()).getSubprocedureIds();<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>        if (childProcIds != null) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>          store.delete(proc, childProcIds);<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>        } else {<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>          store.update(proc);<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>        }<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>      }<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>    } else {<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>      store.update(proc);<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>    }<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span><a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>    return LockState.LOCK_ACQUIRED;<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>  }<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span><a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>  private void yieldProcedure(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>    releaseLock(proc, false);<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    scheduler.yield(proc);<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>  }<a name="line.1461"></a>
 <span class="sourceLineNo">1462</span><a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>    return LockState.LOCK_ACQUIRED;<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>  }<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span><a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>  private void yieldProcedure(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>    releaseLock(proc, false);<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>    scheduler.yield(proc);<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>  }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span><a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>  /**<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>   * Executes &lt;code&gt;procedure&lt;/code&gt;<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>   * &lt;ul&gt;<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>   *  &lt;li&gt;Calls the doExecute() of the procedure<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>   *  &lt;li&gt;If the procedure execution didn't fail (i.e. valid user input)<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>   *  &lt;ul&gt;<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>   *    &lt;li&gt;...and returned subprocedures<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>   *    &lt;ul&gt;&lt;li&gt;The subprocedures are initialized.<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>   *      &lt;li&gt;The subprocedures are added to the store<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>   *      &lt;li&gt;The subprocedures are added to the runnable queue<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>   *      &lt;li&gt;The procedure is now in a WAITING state, waiting for the subprocedures to complete<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>   *    &lt;/ul&gt;<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>   *    &lt;/li&gt;<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>   *   &lt;li&gt;...if there are no subprocedure<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>   *    &lt;ul&gt;&lt;li&gt;the procedure completed successfully<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>   *      &lt;li&gt;if there is a parent (WAITING)<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>   *      &lt;li&gt;the parent state will be set to RUNNABLE<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>   *    &lt;/ul&gt;<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>   *   &lt;/li&gt;<a name="line.1489"></a>
+<span class="sourceLineNo">1463</span>  /**<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>   * Executes &lt;code&gt;procedure&lt;/code&gt;<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>   * &lt;ul&gt;<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>   *  &lt;li&gt;Calls the doExecute() of the procedure<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>   *  &lt;li&gt;If the procedure execution didn't fail (i.e. valid user input)<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>   *  &lt;ul&gt;<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>   *    &lt;li&gt;...and returned subprocedures<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>   *    &lt;ul&gt;&lt;li&gt;The subprocedures are initialized.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>   *      &lt;li&gt;The subprocedures are added to the store<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>   *      &lt;li&gt;The subprocedures are added to the runnable queue<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>   *      &lt;li&gt;The procedure is now in a WAITING state, waiting for the subprocedures to complete<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>   *    &lt;/ul&gt;<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>   *    &lt;/li&gt;<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>   *   &lt;li&gt;...if there are no subprocedure<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>   *    &lt;ul&gt;&lt;li&gt;the procedure completed successfully<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>   *      &lt;li&gt;if there is a parent (WAITING)<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>   *      &lt;li&gt;the parent state will be set to RUNNABLE<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>   *    &lt;/ul&gt;<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>   *   &lt;/li&gt;<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>   *  &lt;/ul&gt;<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>   *  &lt;/li&gt;<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>   *  &lt;li&gt;In case of failure<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>   *  &lt;ul&gt;<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>   *    &lt;li&gt;The store is updated with the new state&lt;/li&gt;<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>   *    &lt;li&gt;The executor (caller of this method) will start the rollback of the procedure&lt;/li&gt;<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>   *  &lt;/ul&gt;<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>   *  &lt;/li&gt;<a name="line.1489"></a>
 <span class="sourceLineNo">1490</span>   *  &lt;/ul&gt;<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>   *  &lt;/li&gt;<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>   *  &lt;li&gt;In case of failure<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>   *  &lt;ul&gt;<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>   *    &lt;li&gt;The store is updated with the new state&lt;/li&gt;<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>   *    &lt;li&gt;The executor (caller of this method) will start the rollback of the procedure&lt;/li&gt;<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>   *  &lt;/ul&gt;<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>   *  &lt;/li&gt;<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>   *  &lt;/ul&gt;<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>   */<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  private void execProcedure(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>    Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>        "NOT RUNNABLE! " + procedure.toString());<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span><a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    // Procedures can suspend themselves. They skip out by throwing a ProcedureSuspendedException.<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    // The exception is caught below and then we hurry to the exit without disturbing state. The<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>    // idea is that the processing of this procedure will be unsuspended later by an external event<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>    // such the report of a region open.<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    boolean suspended = false;<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span><a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    // Whether to 're-' -execute; run through the loop again.<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>    boolean reExecute = false;<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span><a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    Procedure&lt;TEnvironment&gt;[] subprocs = null;<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>    do {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>      reExecute = false;<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>      try {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>        subprocs = procedure.doExecute(getEnvironment());<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>        if (subprocs != null &amp;&amp; subprocs.length == 0) {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>          subprocs = null;<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        }<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      } catch (ProcedureSuspendedException e) {<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        LOG.trace("Suspend {}", procedure);<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>        suspended = true;<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>      } catch (ProcedureYieldException e) {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>        LOG.trace("Yield {}", procedure, e);<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>        yieldProcedure(procedure);<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>        return;<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      } catch (InterruptedException e) {<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        LOG.trace("Yield interrupt {}", procedure, e);<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>        handleInterruptedException(procedure, e);<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>        yieldProcedure(procedure);<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>        return;<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>      } catch (Throwable e) {<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>        // Catch NullPointerExceptions or similar errors...<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>        String msg = "CODE-BUG: Uncaught runtime exception: " + procedure;<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>        LOG.error(msg, e);<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>        procedure.setFailure(new RemoteProcedureException(msg, e));<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>      }<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span><a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      if (!procedure.isFailed()) {<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>        if (subprocs != null) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>          if (subprocs.length == 1 &amp;&amp; subprocs[0] == procedure) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>            // Procedure returned itself. Quick-shortcut for a state machine-like procedure;<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>            // i.e. we go around this loop again rather than go back out on the scheduler queue.<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>            subprocs = null;<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>            reExecute = true;<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>            LOG.trace("Short-circuit to next step on pid={}", procedure.getProcId());<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          } else {<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>            // Yield the current procedure, and make the subprocedure runnable<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>            // subprocs may come back 'null'.<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            subprocs = initializeChildren(procStack, procedure, subprocs);<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            LOG.info("Initialized subprocedures=" +<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>              (subprocs == null? null:<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>                Stream.of(subprocs).map(e -&gt; "{" + e.toString() + "}").<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>                collect(Collectors.toList()).toString()));<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>          }<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>        } else if (procedure.getState() == ProcedureState.WAITING_TIMEOUT) {<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>          LOG.trace("Added to timeoutExecutor {}", procedure);<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>          timeoutExecutor.add(procedure);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>        } else if (!suspended) {<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>          // No subtask, so we are done<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>          procedure.setState(ProcedureState.SUCCESS);<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        }<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      }<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span><a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>      // Add the procedure to the stack<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      procStack.addRollbackStep(procedure);<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span><a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      // useful to test the procedure recovery.<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>      if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate(suspended)) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>        String msg = "TESTING: Kill before store update: " + procedure;<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>        LOG.debug(msg);<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>        stop();<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        throw new RuntimeException(msg);<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>      }<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span><a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>      //<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      // Commit the transaction even if a suspend (state may have changed). Note this append<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      // can take a bunch of time to complete.<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span><a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      // if the store is not running we are aborting<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      if (!store.isRunning()) {<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>        return;<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>      }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>        yieldProcedure(procedure);<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>        return;<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>      }<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>    } while (reExecute);<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    // Submit the new subprocedures<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>      submitChildrenProcedures(subprocs);<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>    }<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span><a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>    // we need to log the release lock operation before waking up the parent procedure, as there<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    // could be race that the parent procedure may call updateStoreOnExec ahead of us and remove all<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>    // the sub procedures from store and cause problems...<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    releaseLock(procedure, false);<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span><a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>    // if the procedure is complete and has a parent, count down the children latch.<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>    // If 'suspended', do nothing to change state -- let other threads handle unsuspend event.<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    if (!suspended &amp;&amp; procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      countDownChildren(procStack, procedure);<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span><a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>  private Procedure&lt;TEnvironment&gt;[] initializeChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    assert subprocs != null : "expected subprocedures";<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      if (subproc == null) {<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>          new IllegalArgumentIOException(msg)));<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>        return null;<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>      }<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span><a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>      subproc.setRootProcId(rootProcId);<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>      subproc.setProcId(nextProcId());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>      procStack.addSubProcedure(subproc);<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>    }<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span><a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    if (!procedure.isFailed()) {<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>      switch (procedure.getState()) {<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>        case RUNNABLE:<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>          break;<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>        case WAITING_TIMEOUT:<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>          timeoutExecutor.add(procedure);<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>          break;<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>        default:<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>          break;<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>      }<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>    }<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    return subprocs;<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>  }<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span><a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>  private void submitChildrenProcedures(Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>      subproc.updateMetricsOnSubmit(getEnvironment());<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      scheduler.addFront(subproc);<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>  }<a name="line.1663"></a>
+<span class="sourceLineNo">1491</span>   */<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>  private void execProcedure(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>    Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>        "NOT RUNNABLE! " + procedure.toString());<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span><a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>    // Procedures can suspend themselves. They skip out by throwing a ProcedureSuspendedException.<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>    // The exception is caught below and then we hurry to the exit without disturbing state. The<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>    // idea is that the processing of this procedure will be unsuspended later by an external event<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>    // such the report of a region open.<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>    boolean suspended = false;<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span><a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    // Whether to 're-' -execute; run through the loop again.<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>    boolean reExecute = false;<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span><a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>    Procedure&lt;TEnvironment&gt;[] subprocs = null;<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>    do {<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>      reExecute = false;<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      try {<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>        subprocs = procedure.doExecute(getEnvironment());<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>        if (subprocs != null &amp;&amp; subprocs.length == 0) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>          subprocs = null;<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        }<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>      } catch (ProcedureSuspendedException e) {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>        LOG.trace("Suspend {}", procedure);<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>        suspended = true;<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>      } catch (ProcedureYieldException e) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>        LOG.trace("Yield {}", procedure, e);<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>        yieldProcedure(procedure);<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>        return;<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>      } catch (InterruptedException e) {<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        LOG.trace("Yield interrupt {}", procedure, e);<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>        handleInterruptedException(procedure, e);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>        yieldProcedure(procedure);<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>        return;<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      } catch (Throwable e) {<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>        // Catch NullPointerExceptions or similar errors...<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>        String msg = "CODE-BUG: Uncaught runtime exception: " + procedure;<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>        LOG.error(msg, e);<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>        procedure.setFailure(new RemoteProcedureException(msg, e));<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>      }<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span><a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      if (!procedure.isFailed()) {<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>        if (subprocs != null) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>          if (subprocs.length == 1 &amp;&amp; subprocs[0] == procedure) {<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>            // Procedure returned itself. Quick-shortcut for a state machine-like procedure;<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>            // i.e. we go around this loop again rather than go back out on the scheduler queue.<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>            subprocs = null;<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>            reExecute = true;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>            LOG.trace("Short-circuit to next step on pid={}", procedure.getProcId());<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>          } else {<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>            // Yield the current procedure, and make the subprocedure runnable<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>            // subprocs may come back 'null'.<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>            subprocs = initializeChildren(procStack, procedure, subprocs);<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>            LOG.info("Initialized subprocedures=" +<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>              (subprocs == null? null:<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>                Stream.of(subprocs).map(e -&gt; "{" + e.toString() + "}").<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>                collect(Collectors.toList()).toString()));<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>          }<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>        } else if (procedure.getState() == ProcedureState.WAITING_TIMEOUT) {<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>          LOG.trace("Added to timeoutExecutor {}", procedure);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>          timeoutExecutor.add(procedure);<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>        } else if (!suspended) {<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          // No subtask, so we are done<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          procedure.setState(ProcedureState.SUCCESS);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>        }<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>      }<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span><a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>      // Add the procedure to the stack<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>      procStack.addRollbackStep(procedure);<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span><a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>      // useful to test the procedure recovery.<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>      if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate(suspended)) {<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>        String msg = "TESTING: Kill before store update: " + procedure;<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        LOG.debug(msg);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>        stop();<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>        throw new RuntimeException(msg);<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>      }<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span><a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      //<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>      // Commit the transaction even if a suspend (state may have changed). Note this append<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>      // can take a bunch of time to complete.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span><a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      // if the store is not running we are aborting<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>      if (!store.isRunning()) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>        return;<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>      }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>        yieldProcedure(procedure);<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>        return;<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>      }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>    } while (reExecute);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>    // Submit the new subprocedures<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      submitChildrenProcedures(subprocs);<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>    }<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span><a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    // we need to log the release lock operation before waking up the parent procedure, as there<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    // could be race that the parent procedure may call updateStoreOnExec ahead of us and remove all<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    // the sub procedures from store and cause problems...<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    releaseLock(procedure, false);<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span><a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    // if the procedure is complete and has a parent, count down the children latch.<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>    // If 'suspended', do nothing to change state -- let other threads handle unsuspend event.<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    if (!suspended &amp;&amp; procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      countDownChildren(procStack, procedure);<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>    }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>  }<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span><a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>  private Procedure&lt;TEnvironment&gt;[] initializeChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    assert subprocs != null : "expected subprocedures";<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>      if (subproc == null) {<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>          new IllegalArgumentIOException(msg)));<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>        return null;<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>      }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span><a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      subproc.setRootProcId(rootProcId);<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      subproc.setProcId(nextProcId());<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      procStack.addSubProcedure(subproc);<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>    }<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span><a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>    if (!procedure.isFailed()) {<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>      switch (procedure.getState()) {<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>        case RUNNABLE:<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>          break;<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        case WAITING_TIMEOUT:<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>          timeoutExecutor.add(procedure);<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>          break;<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>        default:<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          break;<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>      }<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>    }<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    return subprocs;<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>  }<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span><a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>  private void submitChildrenProcedures(Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>      subproc.updateMetricsOnSubmit(getEnvironment());<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>      scheduler.addFront(subproc);<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    }<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>  }<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span><a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>  private void countDownChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    Procedure&lt;TEnvironment&gt; parent = procedures.get(procedure.getParentProcId());<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    if (parent == null) {<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>      assert procStack.isRollingback();<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>      return;<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    }<a name="line.1663"></a>
 <span class="sourceLineNo">1664</span><a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>  private void countDownChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>    Procedure&lt;TEnvironment&gt; parent = procedures.get(procedure.getParentProcId());<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    if (parent == null) {<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      assert procStack.isRollingback();<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>      return;<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>    }<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span><a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>    // If this procedure is the last child awake the parent procedure<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>    if (parent.tryRunnable()) {<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>      // If we succeeded in making the parent runnable -- i.e. all of its<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      // children have completed, move parent to front of the queue.<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      store.update(parent);<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      scheduler.addFront(parent);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      LOG.info("Finished subprocedure(s) of " + parent + "; resume parent processing.");<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>      return;<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>    }<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>  }<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span><a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>  private void updateStoreOnExec(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>      if (LOG.isTraceEnabled()) {<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>      }<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      store.insert(procedure, subprocs);<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>    } else {<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      LOG.trace("Store update {}", procedure);<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>        // remove child procedures<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        if (childProcIds != null) {<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>          store.delete(procedure, childProcIds);<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>            procedures.remove(childProcIds[i]);<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>          }<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>        } else {<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>          store.update(procedure);<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      } else {<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        store.update(procedure);<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>      }<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>    }<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>  }<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span><a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>  private void handleInterruptedException(Procedure&lt;TEnvironment&gt; proc, InterruptedException e) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>    LOG.trace("Interrupt during {}. suspend and retry it later.", proc, e);<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>    // and the executor/store will be stopped.<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>  }<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span><a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>  private void execCompletionCleanup(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    final TEnvironment env = getEnvironment();<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>    if (proc.hasLock()) {<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>      LOG.warn("Usually this should not happen, we will release the lock before if the procedure" +<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>        " is finished, even if the holdLock is true, arrive here means we have some holes where" +<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        " we do not release the lock. And the releaseLock below may fail since the procedure may" +<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>        " have already been deleted from the procedure store.");<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>      releaseLock(proc, true);<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>    }<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>    try {<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>      proc.completionCleanup(env);<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>    } catch (Throwable e) {<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>    }<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>  }<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span><a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>  private void procedureFinished(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>    // call the procedure completion cleanup handler<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>    execCompletionCleanup(proc);<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span><a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>    CompletedProcedureRetainer&lt;TEnvironment&gt; retainer = new CompletedProcedureRetainer&lt;&gt;(proc);<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span><a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>    // update the executor internal state maps<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>      retainer.setClientAckTime(0);<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>    }<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span><a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>    completed.put(proc.getProcId(), retainer);<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>    rollbackStack.remove(proc.getProcId());<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    procedures.remove(proc.getProcId());<a name="line.1749"></a>
+<span class="sourceLineNo">1665</span>    // If this procedure is the last child awake the parent procedure<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>    if (parent.tryRunnable()) {<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>      // If we succeeded in making the parent runnable -- i.e. all of its<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      // children have completed, move parent to front of the queue.<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>      store.update(parent);<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>      scheduler.addFront(parent);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      LOG.info("Finished subprocedure(s) of " + parent + "; resume parent processing.");<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>      return;<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>    }<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>  }<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span><a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>  private void updateStoreOnExec(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      if (LOG.isTraceEnabled()) {<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>      }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      store.insert(procedure, subprocs);<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>    } else {<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      LOG.trace("Store update {}", procedure);<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>        // remove child procedures<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>        if (childProcIds != null) {<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>          store.delete(procedure, childProcIds);<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>            procedures.remove(childProcIds[i]);<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>          }<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>        } else {<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>          store.update(procedure);<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>        }<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>      } else {<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>        store.update(procedure);<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      }<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>    }<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>  }<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span><a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>  private void handleInterruptedException(Procedure&lt;TEnvironment&gt; proc, InterruptedException e) {<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>    LOG.trace("Interrupt during {}. suspend and retry it later.", proc, e);<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>    // and the executor/store will be stopped.<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>  }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span><a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  private void execCompletionCleanup(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>    final TEnvironment env = getEnvironment();<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>    if (proc.hasLock()) {<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      LOG.warn("Usually this should not happen, we will release the lock before if the procedure" +<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>        " is finished, even if the holdLock is true, arrive here means we have some holes where" +<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        " we do not release the lock. And the releaseLock below may fail since the procedure may" +<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        " have already been deleted from the procedure store.");<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      releaseLock(proc, true);<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>    }<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>    try {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>      proc.completionCleanup(env);<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>    } catch (Throwable e) {<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>    }<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>  }<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span><a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>  private void procedureFinished(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    // call the procedure completion cleanup handler<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>    execCompletionCleanup(proc);<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span><a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>    CompletedProcedureRetainer&lt;TEnvironment&gt; retainer = new CompletedProcedureRetainer&lt;&gt;(proc);<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span><a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>    // update the executor internal state maps<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>      retainer.setClientAckTime(0);<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>    }<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span><a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>    completed.put(proc.getProcId(), retainer);<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>    rollbackStack.remove(proc.getProcId());<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>    procedures.remove(proc.getProcId());<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span><a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>    // call the runnableSet completion cleanup handler<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>    try {<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>      scheduler.completionCleanup(proc);<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>    } catch (Throwable e) {<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: {}", proc, e);<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
 <span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    // call the runnableSet completion cleanup handler<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    try {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      scheduler.completionCleanup(proc);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>    } catch (Throwable e) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: {}", proc, e);<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>    }<a name="line.1757"></a>
+<span class="sourceLineNo">1751</span>    // Notify the listeners<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>  }<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span><a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>  RootProcedureState&lt;TEnvironment&gt; getProcStack(long rootProcId) {<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    return rollbackStack.get(rootProcId);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>  }<a name="line.1757"></a>
 <span class="sourceLineNo">1758</span><a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>    // Notify the listeners<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span><a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>  RootProcedureState&lt;TEnvironment&gt; getProcStack(long rootProcId) {<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>    return rollbackStack.get(rootProcId);<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  }<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>  // ==========================================================================<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>  //  Worker Thread<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>  // ==========================================================================<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>  private class WorkerThread extends StoppableThread {<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    private volatile Procedure&lt;TEnvironment&gt; activeProcedure;<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    public WorkerThread(ThreadGroup group) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      this(group, "PEWorker-");<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    }<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span><a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    protected WorkerThread(ThreadGroup group, String prefix) {<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>      super(group, prefix + workerId.incrementAndGet());<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>      setDaemon(true);<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span><a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>    @Override<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    public void sendStopSignal() {<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      scheduler.signalAll();<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    }<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span><a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>    @Override<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>    public void run() {<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      try {<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>        while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>          Procedure&lt;TEnvironment&gt; proc = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>          if (proc == null) {<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>            continue;<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>          }<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>          this.activeProcedure = proc;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>          int activeCount = activeExecutorCount.incrementAndGet();<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>          int runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>          LOG.trace("Execute pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>            runningCount, activeCount);<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>          executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>          IdLock.Entry lockEntry = procExecutionLock.getLockEntry(proc.getProcId());<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>          try {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>            executeProcedure(proc);<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>          } catch (AssertionError e) {<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            LOG.info("ASSERT pid=" + proc.getProcId(), e);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            throw e;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          } finally {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>            procExecutionLock.releaseLockEntry(lockEntry);<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>            activeCount = activeExecutorCount.decrementAndGet();<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>            runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>            LOG.trace("Halt pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>              runningCount, activeCount);<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>            this.activeProcedure = null;<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>            lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>            executionStartTime.set(Long.MAX_VALUE);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>          }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>        }<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>      } catch (Throwable t) {<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        LOG.warn("Worker terminating UNNATURALLY {}", this.activeProcedure, t);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>      } finally {<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        LOG.trace("Worker terminated.");<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>      }<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>      workerThreads.remove(this);<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    }<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    @Override<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    public String toString() {<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      Procedure&lt;?&gt; p = this.activeProcedure;<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>      return getName() + "(pid=" + (p == null? Procedure.NO_PROC_ID: p.getProcId() + ")");<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>    }<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span><a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    /**<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>     * @return the time since the current procedure is running<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>     */<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    public long getCurrentRunTime() {<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>    }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span><a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    // core worker never timeout<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.1842"></a>
-<span class="sourceLineNo">1843</spa

<TRUNCATED>

[03/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
index 9c54904..0a656db 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
@@ -1371,589 +1371,581 @@
 <span class="sourceLineNo">1363</span>    assert subprocStack != null : "Called rollback with no steps executed rootProc=" + rootProc;<a name="line.1363"></a>
 <span class="sourceLineNo">1364</span><a name="line.1364"></a>
 <span class="sourceLineNo">1365</span>    int stackTail = subprocStack.size();<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>    boolean reuseLock = false;<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>    while (stackTail --&gt; 0) {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>      Procedure&lt;TEnvironment&gt; proc = subprocStack.get(stackTail);<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span><a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>      LockState lockState;<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>      if (!reuseLock &amp;&amp; (lockState = acquireLock(proc)) != LockState.LOCK_ACQUIRED) {<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>        // can't take a lock on the procedure, add the root-proc back on the<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>        // queue waiting for the lock availability<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>        return lockState;<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>      }<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span><a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      lockState = executeRollback(proc);<a name="line.1377"></a>
+<span class="sourceLineNo">1366</span>    while (stackTail-- &gt; 0) {<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>      Procedure&lt;TEnvironment&gt; proc = subprocStack.get(stackTail);<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span><a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>      LockState lockState = acquireLock(proc);<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>      if (lockState != LockState.LOCK_ACQUIRED) {<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>        // can't take a lock on the procedure, add the root-proc back on the<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>        // queue waiting for the lock availability<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>        return lockState;<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>      }<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span><a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>      lockState = executeRollback(proc);<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      releaseLock(proc, false);<a name="line.1377"></a>
 <span class="sourceLineNo">1378</span>      boolean abortRollback = lockState != LockState.LOCK_ACQUIRED;<a name="line.1378"></a>
 <span class="sourceLineNo">1379</span>      abortRollback |= !isRunning() || !store.isRunning();<a name="line.1379"></a>
 <span class="sourceLineNo">1380</span><a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      // If the next procedure is the same to this one<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      // (e.g. StateMachineProcedure reuse the same instance)<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      // we can avoid to lock/unlock each step<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>      reuseLock = stackTail &gt; 0 &amp;&amp; (subprocStack.get(stackTail - 1) == proc) &amp;&amp; !abortRollback;<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>      if (!reuseLock &amp;&amp; proc.hasLock()) {<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        releaseLock(proc, false);<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>      }<a name="line.1387"></a>
+<span class="sourceLineNo">1381</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      // useful to test the procedure recovery.<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>      if (abortRollback) {<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>        return lockState;<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>      }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span><a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>      subprocStack.remove(stackTail);<a name="line.1387"></a>
 <span class="sourceLineNo">1388</span><a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>      // useful to test the procedure recovery.<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      if (abortRollback) {<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>        return lockState;<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>      }<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span><a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>      subprocStack.remove(stackTail);<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span><a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>      if (proc.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>        return LockState.LOCK_YIELD_WAIT;<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>      }<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span><a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>      if (proc != rootProc) {<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>        execCompletionCleanup(proc);<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      }<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>    }<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span><a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    // Finalize the procedure state<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>    LOG.info("Rolled back " + rootProc +<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>             " exec-time=" + StringUtils.humanTimeDiff(rootProc.elapsedTime()));<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>    procedureFinished(rootProc);<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>    return LockState.LOCK_ACQUIRED;<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>  }<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span><a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>  /**<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>   * Execute the rollback of the procedure step.<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>   * It updates the store with the new state (stack index)<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>   * or will remove completly the procedure in case it is a child.<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>   */<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>  private LockState executeRollback(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>    try {<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>      proc.doRollback(getEnvironment());<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>    } catch (IOException e) {<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>      LOG.debug("Roll back attempt failed for {}", proc, e);<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>    } catch (InterruptedException e) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>      handleInterruptedException(proc, e);<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>    } catch (Throwable e) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>      LOG.error(HBaseMarkers.FATAL, "CODE-BUG: Uncaught runtime exception for " + proc, e);<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>    }<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span><a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>    // allows to kill the executor before something is stored to the wal.<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>    // useful to test the procedure recovery.<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>    if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate()) {<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>      String msg = "TESTING: Kill before store update";<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>      LOG.debug(msg);<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      stop();<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>      throw new RuntimeException(msg);<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    }<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span><a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>    if (proc.removeStackIndex()) {<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      proc.setState(ProcedureState.ROLLEDBACK);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span><a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      // update metrics on finishing the procedure (fail)<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>      proc.updateMetricsOnFinish(getEnvironment(), proc.elapsedTime(), false);<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span><a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>      if (proc.hasParent()) {<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>        store.delete(proc.getProcId());<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>        procedures.remove(proc.getProcId());<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      } else {<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>        final long[] childProcIds = rollbackStack.get(proc.getProcId()).getSubprocedureIds();<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>        if (childProcIds != null) {<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>          store.delete(proc, childProcIds);<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>        } else {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>          store.update(proc);<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>        }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      }<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>    } else {<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>      store.update(proc);<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    }<a name="line.1461"></a>
+<span class="sourceLineNo">1389</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>      if (proc.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        return LockState.LOCK_YIELD_WAIT;<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span><a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      if (proc != rootProc) {<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>        execCompletionCleanup(proc);<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>      }<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>    }<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span><a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>    // Finalize the procedure state<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>    LOG.info("Rolled back " + rootProc +<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>             " exec-time=" + StringUtils.humanTimeDiff(rootProc.elapsedTime()));<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>    procedureFinished(rootProc);<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>    return LockState.LOCK_ACQUIRED;<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>  }<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span><a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>  /**<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>   * Execute the rollback of the procedure step.<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>   * It updates the store with the new state (stack index)<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>   * or will remove completly the procedure in case it is a child.<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>   */<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>  private LockState executeRollback(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>    try {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>      proc.doRollback(getEnvironment());<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>    } catch (IOException e) {<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      LOG.debug("Roll back attempt failed for {}", proc, e);<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>    } catch (InterruptedException e) {<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>      handleInterruptedException(proc, e);<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>    } catch (Throwable e) {<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>      LOG.error(HBaseMarkers.FATAL, "CODE-BUG: Uncaught runtime exception for " + proc, e);<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>    }<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span><a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>    // allows to kill the executor before something is stored to the wal.<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    // useful to test the procedure recovery.<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>    if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate()) {<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>      String msg = "TESTING: Kill before store update";<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      LOG.debug(msg);<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      stop();<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>      throw new RuntimeException(msg);<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>    }<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span><a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>    if (proc.removeStackIndex()) {<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>      proc.setState(ProcedureState.ROLLEDBACK);<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span><a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>      // update metrics on finishing the procedure (fail)<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>      proc.updateMetricsOnFinish(getEnvironment(), proc.elapsedTime(), false);<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span><a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>      if (proc.hasParent()) {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>        store.delete(proc.getProcId());<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>        procedures.remove(proc.getProcId());<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      } else {<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>        final long[] childProcIds = rollbackStack.get(proc.getProcId()).getSubprocedureIds();<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>        if (childProcIds != null) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>          store.delete(proc, childProcIds);<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>        } else {<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>          store.update(proc);<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>        }<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>      }<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>    } else {<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>      store.update(proc);<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>    }<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span><a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>    return LockState.LOCK_ACQUIRED;<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>  }<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span><a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>  private void yieldProcedure(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>    releaseLock(proc, false);<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    scheduler.yield(proc);<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>  }<a name="line.1461"></a>
 <span class="sourceLineNo">1462</span><a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>    return LockState.LOCK_ACQUIRED;<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>  }<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span><a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>  private void yieldProcedure(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>    releaseLock(proc, false);<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>    scheduler.yield(proc);<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>  }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span><a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>  /**<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>   * Executes &lt;code&gt;procedure&lt;/code&gt;<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>   * &lt;ul&gt;<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>   *  &lt;li&gt;Calls the doExecute() of the procedure<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>   *  &lt;li&gt;If the procedure execution didn't fail (i.e. valid user input)<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>   *  &lt;ul&gt;<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>   *    &lt;li&gt;...and returned subprocedures<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>   *    &lt;ul&gt;&lt;li&gt;The subprocedures are initialized.<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>   *      &lt;li&gt;The subprocedures are added to the store<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>   *      &lt;li&gt;The subprocedures are added to the runnable queue<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>   *      &lt;li&gt;The procedure is now in a WAITING state, waiting for the subprocedures to complete<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>   *    &lt;/ul&gt;<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>   *    &lt;/li&gt;<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>   *   &lt;li&gt;...if there are no subprocedure<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>   *    &lt;ul&gt;&lt;li&gt;the procedure completed successfully<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>   *      &lt;li&gt;if there is a parent (WAITING)<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>   *      &lt;li&gt;the parent state will be set to RUNNABLE<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>   *    &lt;/ul&gt;<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>   *   &lt;/li&gt;<a name="line.1489"></a>
+<span class="sourceLineNo">1463</span>  /**<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>   * Executes &lt;code&gt;procedure&lt;/code&gt;<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>   * &lt;ul&gt;<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>   *  &lt;li&gt;Calls the doExecute() of the procedure<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>   *  &lt;li&gt;If the procedure execution didn't fail (i.e. valid user input)<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>   *  &lt;ul&gt;<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>   *    &lt;li&gt;...and returned subprocedures<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>   *    &lt;ul&gt;&lt;li&gt;The subprocedures are initialized.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>   *      &lt;li&gt;The subprocedures are added to the store<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>   *      &lt;li&gt;The subprocedures are added to the runnable queue<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>   *      &lt;li&gt;The procedure is now in a WAITING state, waiting for the subprocedures to complete<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>   *    &lt;/ul&gt;<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>   *    &lt;/li&gt;<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>   *   &lt;li&gt;...if there are no subprocedure<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>   *    &lt;ul&gt;&lt;li&gt;the procedure completed successfully<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>   *      &lt;li&gt;if there is a parent (WAITING)<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>   *      &lt;li&gt;the parent state will be set to RUNNABLE<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>   *    &lt;/ul&gt;<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>   *   &lt;/li&gt;<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>   *  &lt;/ul&gt;<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>   *  &lt;/li&gt;<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>   *  &lt;li&gt;In case of failure<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>   *  &lt;ul&gt;<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>   *    &lt;li&gt;The store is updated with the new state&lt;/li&gt;<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>   *    &lt;li&gt;The executor (caller of this method) will start the rollback of the procedure&lt;/li&gt;<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>   *  &lt;/ul&gt;<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>   *  &lt;/li&gt;<a name="line.1489"></a>
 <span class="sourceLineNo">1490</span>   *  &lt;/ul&gt;<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>   *  &lt;/li&gt;<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>   *  &lt;li&gt;In case of failure<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>   *  &lt;ul&gt;<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>   *    &lt;li&gt;The store is updated with the new state&lt;/li&gt;<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>   *    &lt;li&gt;The executor (caller of this method) will start the rollback of the procedure&lt;/li&gt;<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>   *  &lt;/ul&gt;<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>   *  &lt;/li&gt;<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>   *  &lt;/ul&gt;<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>   */<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  private void execProcedure(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>    Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>        "NOT RUNNABLE! " + procedure.toString());<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span><a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    // Procedures can suspend themselves. They skip out by throwing a ProcedureSuspendedException.<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    // The exception is caught below and then we hurry to the exit without disturbing state. The<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>    // idea is that the processing of this procedure will be unsuspended later by an external event<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>    // such the report of a region open.<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    boolean suspended = false;<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span><a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    // Whether to 're-' -execute; run through the loop again.<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>    boolean reExecute = false;<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span><a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    Procedure&lt;TEnvironment&gt;[] subprocs = null;<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>    do {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>      reExecute = false;<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>      try {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>        subprocs = procedure.doExecute(getEnvironment());<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>        if (subprocs != null &amp;&amp; subprocs.length == 0) {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>          subprocs = null;<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        }<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      } catch (ProcedureSuspendedException e) {<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        LOG.trace("Suspend {}", procedure);<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>        suspended = true;<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>      } catch (ProcedureYieldException e) {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>        LOG.trace("Yield {}", procedure, e);<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>        yieldProcedure(procedure);<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>        return;<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      } catch (InterruptedException e) {<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        LOG.trace("Yield interrupt {}", procedure, e);<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>        handleInterruptedException(procedure, e);<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>        yieldProcedure(procedure);<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>        return;<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>      } catch (Throwable e) {<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>        // Catch NullPointerExceptions or similar errors...<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>        String msg = "CODE-BUG: Uncaught runtime exception: " + procedure;<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>        LOG.error(msg, e);<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>        procedure.setFailure(new RemoteProcedureException(msg, e));<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>      }<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span><a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      if (!procedure.isFailed()) {<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>        if (subprocs != null) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>          if (subprocs.length == 1 &amp;&amp; subprocs[0] == procedure) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>            // Procedure returned itself. Quick-shortcut for a state machine-like procedure;<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>            // i.e. we go around this loop again rather than go back out on the scheduler queue.<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>            subprocs = null;<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>            reExecute = true;<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>            LOG.trace("Short-circuit to next step on pid={}", procedure.getProcId());<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          } else {<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>            // Yield the current procedure, and make the subprocedure runnable<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>            // subprocs may come back 'null'.<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            subprocs = initializeChildren(procStack, procedure, subprocs);<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            LOG.info("Initialized subprocedures=" +<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>              (subprocs == null? null:<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>                Stream.of(subprocs).map(e -&gt; "{" + e.toString() + "}").<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>                collect(Collectors.toList()).toString()));<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>          }<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>        } else if (procedure.getState() == ProcedureState.WAITING_TIMEOUT) {<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>          LOG.trace("Added to timeoutExecutor {}", procedure);<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>          timeoutExecutor.add(procedure);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>        } else if (!suspended) {<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>          // No subtask, so we are done<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>          procedure.setState(ProcedureState.SUCCESS);<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        }<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      }<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span><a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>      // Add the procedure to the stack<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      procStack.addRollbackStep(procedure);<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span><a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      // useful to test the procedure recovery.<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>      if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate(suspended)) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>        String msg = "TESTING: Kill before store update: " + procedure;<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>        LOG.debug(msg);<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>        stop();<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        throw new RuntimeException(msg);<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>      }<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span><a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>      //<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      // Commit the transaction even if a suspend (state may have changed). Note this append<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      // can take a bunch of time to complete.<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span><a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      // if the store is not running we are aborting<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      if (!store.isRunning()) {<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>        return;<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>      }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>        yieldProcedure(procedure);<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>        return;<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>      }<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>    } while (reExecute);<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    // Submit the new subprocedures<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>      submitChildrenProcedures(subprocs);<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>    }<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span><a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>    // we need to log the release lock operation before waking up the parent procedure, as there<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    // could be race that the parent procedure may call updateStoreOnExec ahead of us and remove all<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>    // the sub procedures from store and cause problems...<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    releaseLock(procedure, false);<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span><a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>    // if the procedure is complete and has a parent, count down the children latch.<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>    // If 'suspended', do nothing to change state -- let other threads handle unsuspend event.<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    if (!suspended &amp;&amp; procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      countDownChildren(procStack, procedure);<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span><a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>  private Procedure&lt;TEnvironment&gt;[] initializeChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    assert subprocs != null : "expected subprocedures";<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      if (subproc == null) {<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>          new IllegalArgumentIOException(msg)));<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>        return null;<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>      }<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span><a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>      subproc.setRootProcId(rootProcId);<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>      subproc.setProcId(nextProcId());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>      procStack.addSubProcedure(subproc);<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>    }<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span><a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    if (!procedure.isFailed()) {<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>      switch (procedure.getState()) {<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>        case RUNNABLE:<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>          break;<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>        case WAITING_TIMEOUT:<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>          timeoutExecutor.add(procedure);<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>          break;<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>        default:<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>          break;<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>      }<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>    }<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    return subprocs;<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>  }<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span><a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>  private void submitChildrenProcedures(Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>      subproc.updateMetricsOnSubmit(getEnvironment());<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      scheduler.addFront(subproc);<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>  }<a name="line.1663"></a>
+<span class="sourceLineNo">1491</span>   */<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>  private void execProcedure(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>    Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>        "NOT RUNNABLE! " + procedure.toString());<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span><a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>    // Procedures can suspend themselves. They skip out by throwing a ProcedureSuspendedException.<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>    // The exception is caught below and then we hurry to the exit without disturbing state. The<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>    // idea is that the processing of this procedure will be unsuspended later by an external event<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>    // such the report of a region open.<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>    boolean suspended = false;<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span><a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    // Whether to 're-' -execute; run through the loop again.<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>    boolean reExecute = false;<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span><a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>    Procedure&lt;TEnvironment&gt;[] subprocs = null;<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>    do {<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>      reExecute = false;<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      try {<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>        subprocs = procedure.doExecute(getEnvironment());<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>        if (subprocs != null &amp;&amp; subprocs.length == 0) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>          subprocs = null;<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        }<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>      } catch (ProcedureSuspendedException e) {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>        LOG.trace("Suspend {}", procedure);<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>        suspended = true;<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>      } catch (ProcedureYieldException e) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>        LOG.trace("Yield {}", procedure, e);<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>        yieldProcedure(procedure);<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>        return;<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>      } catch (InterruptedException e) {<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        LOG.trace("Yield interrupt {}", procedure, e);<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>        handleInterruptedException(procedure, e);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>        yieldProcedure(procedure);<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>        return;<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      } catch (Throwable e) {<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>        // Catch NullPointerExceptions or similar errors...<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>        String msg = "CODE-BUG: Uncaught runtime exception: " + procedure;<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>        LOG.error(msg, e);<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>        procedure.setFailure(new RemoteProcedureException(msg, e));<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>      }<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span><a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      if (!procedure.isFailed()) {<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>        if (subprocs != null) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>          if (subprocs.length == 1 &amp;&amp; subprocs[0] == procedure) {<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>            // Procedure returned itself. Quick-shortcut for a state machine-like procedure;<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>            // i.e. we go around this loop again rather than go back out on the scheduler queue.<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>            subprocs = null;<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>            reExecute = true;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>            LOG.trace("Short-circuit to next step on pid={}", procedure.getProcId());<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>          } else {<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>            // Yield the current procedure, and make the subprocedure runnable<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>            // subprocs may come back 'null'.<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>            subprocs = initializeChildren(procStack, procedure, subprocs);<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>            LOG.info("Initialized subprocedures=" +<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>              (subprocs == null? null:<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>                Stream.of(subprocs).map(e -&gt; "{" + e.toString() + "}").<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>                collect(Collectors.toList()).toString()));<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>          }<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>        } else if (procedure.getState() == ProcedureState.WAITING_TIMEOUT) {<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>          LOG.trace("Added to timeoutExecutor {}", procedure);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>          timeoutExecutor.add(procedure);<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>        } else if (!suspended) {<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          // No subtask, so we are done<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          procedure.setState(ProcedureState.SUCCESS);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>        }<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>      }<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span><a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>      // Add the procedure to the stack<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>      procStack.addRollbackStep(procedure);<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span><a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>      // useful to test the procedure recovery.<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>      if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate(suspended)) {<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>        String msg = "TESTING: Kill before store update: " + procedure;<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        LOG.debug(msg);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>        stop();<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>        throw new RuntimeException(msg);<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>      }<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span><a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      //<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>      // Commit the transaction even if a suspend (state may have changed). Note this append<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>      // can take a bunch of time to complete.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span><a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      // if the store is not running we are aborting<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>      if (!store.isRunning()) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>        return;<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>      }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>        yieldProcedure(procedure);<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>        return;<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>      }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>    } while (reExecute);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>    // Submit the new subprocedures<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      submitChildrenProcedures(subprocs);<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>    }<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span><a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    // we need to log the release lock operation before waking up the parent procedure, as there<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    // could be race that the parent procedure may call updateStoreOnExec ahead of us and remove all<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    // the sub procedures from store and cause problems...<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    releaseLock(procedure, false);<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span><a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    // if the procedure is complete and has a parent, count down the children latch.<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>    // If 'suspended', do nothing to change state -- let other threads handle unsuspend event.<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    if (!suspended &amp;&amp; procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      countDownChildren(procStack, procedure);<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>    }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>  }<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span><a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>  private Procedure&lt;TEnvironment&gt;[] initializeChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    assert subprocs != null : "expected subprocedures";<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>      if (subproc == null) {<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>          new IllegalArgumentIOException(msg)));<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>        return null;<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>      }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span><a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      subproc.setRootProcId(rootProcId);<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      subproc.setProcId(nextProcId());<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      procStack.addSubProcedure(subproc);<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>    }<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span><a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>    if (!procedure.isFailed()) {<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>      switch (procedure.getState()) {<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>        case RUNNABLE:<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>          break;<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        case WAITING_TIMEOUT:<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>          timeoutExecutor.add(procedure);<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>          break;<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>        default:<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          break;<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>      }<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>    }<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    return subprocs;<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>  }<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span><a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>  private void submitChildrenProcedures(Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>      subproc.updateMetricsOnSubmit(getEnvironment());<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>      scheduler.addFront(subproc);<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    }<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>  }<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span><a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>  private void countDownChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    Procedure&lt;TEnvironment&gt; parent = procedures.get(procedure.getParentProcId());<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    if (parent == null) {<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>      assert procStack.isRollingback();<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>      return;<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    }<a name="line.1663"></a>
 <span class="sourceLineNo">1664</span><a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>  private void countDownChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>    Procedure&lt;TEnvironment&gt; parent = procedures.get(procedure.getParentProcId());<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    if (parent == null) {<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      assert procStack.isRollingback();<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>      return;<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>    }<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span><a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>    // If this procedure is the last child awake the parent procedure<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>    if (parent.tryRunnable()) {<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>      // If we succeeded in making the parent runnable -- i.e. all of its<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      // children have completed, move parent to front of the queue.<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      store.update(parent);<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      scheduler.addFront(parent);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      LOG.info("Finished subprocedure(s) of " + parent + "; resume parent processing.");<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>      return;<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>    }<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>  }<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span><a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>  private void updateStoreOnExec(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>      if (LOG.isTraceEnabled()) {<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>      }<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      store.insert(procedure, subprocs);<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>    } else {<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      LOG.trace("Store update {}", procedure);<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>        // remove child procedures<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        if (childProcIds != null) {<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>          store.delete(procedure, childProcIds);<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>            procedures.remove(childProcIds[i]);<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>          }<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>        } else {<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>          store.update(procedure);<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      } else {<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        store.update(procedure);<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>      }<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>    }<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>  }<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span><a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>  private void handleInterruptedException(Procedure&lt;TEnvironment&gt; proc, InterruptedException e) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>    LOG.trace("Interrupt during {}. suspend and retry it later.", proc, e);<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>    // and the executor/store will be stopped.<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>  }<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span><a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>  private void execCompletionCleanup(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    final TEnvironment env = getEnvironment();<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>    if (proc.hasLock()) {<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>      LOG.warn("Usually this should not happen, we will release the lock before if the procedure" +<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>        " is finished, even if the holdLock is true, arrive here means we have some holes where" +<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        " we do not release the lock. And the releaseLock below may fail since the procedure may" +<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>        " have already been deleted from the procedure store.");<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>      releaseLock(proc, true);<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>    }<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>    try {<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>      proc.completionCleanup(env);<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>    } catch (Throwable e) {<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>    }<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>  }<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span><a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>  private void procedureFinished(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>    // call the procedure completion cleanup handler<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>    execCompletionCleanup(proc);<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span><a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>    CompletedProcedureRetainer&lt;TEnvironment&gt; retainer = new CompletedProcedureRetainer&lt;&gt;(proc);<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span><a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>    // update the executor internal state maps<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>      retainer.setClientAckTime(0);<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>    }<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span><a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>    completed.put(proc.getProcId(), retainer);<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>    rollbackStack.remove(proc.getProcId());<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    procedures.remove(proc.getProcId());<a name="line.1749"></a>
+<span class="sourceLineNo">1665</span>    // If this procedure is the last child awake the parent procedure<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>    if (parent.tryRunnable()) {<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>      // If we succeeded in making the parent runnable -- i.e. all of its<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      // children have completed, move parent to front of the queue.<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>      store.update(parent);<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>      scheduler.addFront(parent);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      LOG.info("Finished subprocedure(s) of " + parent + "; resume parent processing.");<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>      return;<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>    }<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>  }<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span><a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>  private void updateStoreOnExec(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      if (LOG.isTraceEnabled()) {<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>      }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      store.insert(procedure, subprocs);<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>    } else {<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      LOG.trace("Store update {}", procedure);<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>        // remove child procedures<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>        if (childProcIds != null) {<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>          store.delete(procedure, childProcIds);<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>            procedures.remove(childProcIds[i]);<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>          }<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>        } else {<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>          store.update(procedure);<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>        }<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>      } else {<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>        store.update(procedure);<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      }<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>    }<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>  }<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span><a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>  private void handleInterruptedException(Procedure&lt;TEnvironment&gt; proc, InterruptedException e) {<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>    LOG.trace("Interrupt during {}. suspend and retry it later.", proc, e);<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>    // and the executor/store will be stopped.<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>  }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span><a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  private void execCompletionCleanup(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>    final TEnvironment env = getEnvironment();<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>    if (proc.hasLock()) {<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      LOG.warn("Usually this should not happen, we will release the lock before if the procedure" +<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>        " is finished, even if the holdLock is true, arrive here means we have some holes where" +<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        " we do not release the lock. And the releaseLock below may fail since the procedure may" +<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        " have already been deleted from the procedure store.");<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      releaseLock(proc, true);<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>    }<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>    try {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>      proc.completionCleanup(env);<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>    } catch (Throwable e) {<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>    }<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>  }<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span><a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>  private void procedureFinished(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    // call the procedure completion cleanup handler<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>    execCompletionCleanup(proc);<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span><a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>    CompletedProcedureRetainer&lt;TEnvironment&gt; retainer = new CompletedProcedureRetainer&lt;&gt;(proc);<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span><a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>    // update the executor internal state maps<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>      retainer.setClientAckTime(0);<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>    }<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span><a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>    completed.put(proc.getProcId(), retainer);<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>    rollbackStack.remove(proc.getProcId());<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>    procedures.remove(proc.getProcId());<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span><a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>    // call the runnableSet completion cleanup handler<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>    try {<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>      scheduler.completionCleanup(proc);<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>    } catch (Throwable e) {<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: {}", proc, e);<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
 <span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    // call the runnableSet completion cleanup handler<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    try {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      scheduler.completionCleanup(proc);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>    } catch (Throwable e) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: {}", proc, e);<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>    }<a name="line.1757"></a>
+<span class="sourceLineNo">1751</span>    // Notify the listeners<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>  }<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span><a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>  RootProcedureState&lt;TEnvironment&gt; getProcStack(long rootProcId) {<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    return rollbackStack.get(rootProcId);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>  }<a name="line.1757"></a>
 <span class="sourceLineNo">1758</span><a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>    // Notify the listeners<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span><a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>  RootProcedureState&lt;TEnvironment&gt; getProcStack(long rootProcId) {<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>    return rollbackStack.get(rootProcId);<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  }<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>  // ==========================================================================<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>  //  Worker Thread<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>  // ==========================================================================<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>  private class WorkerThread extends StoppableThread {<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    private volatile Procedure&lt;TEnvironment&gt; activeProcedure;<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    public WorkerThread(ThreadGroup group) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      this(group, "PEWorker-");<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    }<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span><a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    protected WorkerThread(ThreadGroup group, String prefix) {<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>      super(group, prefix + workerId.incrementAndGet());<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>      setDaemon(true);<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span><a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>    @Override<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    public void sendStopSignal() {<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      scheduler.signalAll();<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    }<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span><a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>    @Override<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>    public void run() {<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      try {<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>        while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>          Procedure&lt;TEnvironment&gt; proc = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>          if (proc == null) {<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>            continue;<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>          }<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>          this.activeProcedure = proc;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>          int activeCount = activeExecutorCount.incrementAndGet();<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>          int runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>          LOG.trace("Execute pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>            runningCount, activeCount);<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>          executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>          IdLock.Entry lockEntry = procExecutionLock.getLockEntry(proc.getProcId());<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>          try {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>            executeProcedure(proc);<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>          } catch (AssertionError e) {<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            LOG.info("ASSERT pid=" + proc.getProcId(), e);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            throw e;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          } finally {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>            procExecutionLock.releaseLockEntry(lockEntry);<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>            activeCount = activeExecutorCount.decrementAndGet();<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>            runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>            LOG.trace("Halt pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>              runningCount, activeCount);<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>            this.activeProcedure = null;<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>            lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>            executionStartTime.set(Long.MAX_VALUE);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>          }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>        }<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>      } catch (Throwable t) {<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        LOG.warn("Worker terminating UNNATURALLY {}", this.activeProcedure, t);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>      } finally {<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        LOG.trace("Worker terminated.");<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>      }<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>      workerThreads.remove(this);<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    }<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    @Override<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    public String toString() {<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      Procedure&lt;?&gt; p = this.activeProcedure;<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>      return getName() + "(pid=" + (p == null? Procedure.NO_PROC_ID: p.getProcId() + ")");<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>    }<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span><a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    /**<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>     * @return the time since the current procedure is running<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>     */<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    public long getCurrentRunTime() {<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>    }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span><a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    // core worker never timeout<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>      return true;<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    }<a name="line.1844"></a>
-<span class="so

<TRUNCATED>

[19/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/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 97558ff..7277664 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -552,24 +552,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/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/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/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/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/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/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/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/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/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/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.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/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/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/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/75e49c45/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 4bb8eeb..aa61321 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/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/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">CompareFilter.CompareOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/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/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/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/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">CompareFilter.CompareOp</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/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 d4124d7..a41bce3 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/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/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/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/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/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>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/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 bc33c0a..76f6d8f 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -293,10 +293,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/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/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/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/75e49c45/devapidocs/org/apache/hadoop/hbase/master/TableStateManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/TableStateManager.html b/devapidocs/org/apache/hadoop/hbase/master/TableStateManager.html
index 3318eec..ae5ed5a 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/TableStateManager.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/TableStateManager.html
@@ -563,7 +563,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableState.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>metaStateUpdated</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TableStateManager.html#line.244">metaStateUpdated</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TableStateManager.html#line.245">metaStateUpdated</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/TableState.State.html" title="enum in org.apache.hadoop.hbase.client">TableState.State</a>&nbsp;newState)
                          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>
@@ -578,7 +578,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableState.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>metaStateDeleted</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TableStateManager.html#line.248">metaStateDeleted</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TableStateManager.html#line.249">metaStateDeleted</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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -593,7 +593,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableState.ht
 <li class="blockList">
 <h4>readMetaState</h4>
 <pre>@Nullable
-private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableState.html" title="class in org.apache.hadoop.hbase.client">TableState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TableStateManager.html#line.252">readMetaState</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableState.html" title="class in org.apache.hadoop.hbase.client">TableState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TableStateManager.html#line.253">readMetaState</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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -607,7 +607,7 @@ private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableState.h
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TableStateManager.html#line.264">start</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TableStateManager.html#line.265">start</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>
@@ -621,7 +621,7 @@ private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableState.h
 <ul class="blockList">
 <li class="blockList">
 <h4>fixTableStates</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TableStateManager.html#line.271">fixTableStates</a>(<a href="../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase">TableDescriptors</a>&nbsp;tableDescriptors,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TableStateManager.html#line.272">fixTableStates</a>(<a href="../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase">TableDescriptors</a>&nbsp;tableDescriptors,
                             <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection)
                      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>
@@ -636,7 +636,7 @@ private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableState.h
 <ul class="blockList">
 <li class="blockList">
 <h4>fixTableState</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TableStateManager.html#line.308">fixTableState</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableState.html" title="class in org.apache.hadoop.hbase.client">TableState</a>&nbsp;tableState)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TableStateManager.html#line.309">fixTableState</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableState.html" title="class in org.apache.hadoop.hbase.client">TableState</a>&nbsp;tableState)
                       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">For subclasses in case they want to do fixup post hbase:meta.</div>
 <dl>
@@ -652,7 +652,7 @@ private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableState.h
 <li class="blockList">
 <h4>migrateZooKeeper</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TableStateManager.html#line.322">migrateZooKeeper</a>()
+private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TableStateManager.html#line.323">migrateZooKeeper</a>()
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Since 2.0.0. Remove in hbase-3.0.0.</span></div>
 <div class="block">This code is for case where a hbase2 Master is starting for the first time. ZooKeeper is where
@@ -675,7 +675,7 @@ private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/
 <li class="blockList">
 <h4>deleteZooKeeper</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TableStateManager.html#line.370">deleteZooKeeper</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TableStateManager.html#line.371">deleteZooKeeper</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Since 2.0.0. To be removed in hbase-3.0.0.</span></div>
 <div class="block">Utility method that knows how to delete the old hbase-1.x table state znode. Used also by the
  Mirroring subclass.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/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/75e49c45/devapidocs/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.PlanComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.PlanComparator.html b/devapidocs/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.PlanComparator.html
index e0b4007..89dd108 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.PlanComparator.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.PlanComparator.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.100">SimpleRegionNormalizer.PlanComparator</a>
+<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.102">SimpleRegionNormalizer.PlanComparator</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="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/NormalizationPlan.html" title="interface in org.apache.hadoop.hbase.master.normalizer">NormalizationPlan</a>&gt;</pre>
 <div class="block">Comparator class that gives higher priority to region Split plan.</div>
@@ -196,7 +196,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>PlanComparator</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.PlanComparator.html#line.100">PlanComparator</a>()</pre>
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.PlanComparator.html#line.102">PlanComparator</a>()</pre>
 </li>
 </ul>
 </li>
@@ -213,7 +213,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>compare</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.PlanComparator.html#line.102">compare</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/NormalizationPlan.html" title="interface in org.apache.hadoop.hbase.master.normalizer">NormalizationPlan</a>&nbsp;plan1,
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.PlanComparator.html#line.104">compare</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/NormalizationPlan.html" title="interface in org.apache.hadoop.hbase.master.normalizer">NormalizationPlan</a>&nbsp;plan1,
                    <a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/NormalizationPlan.html" title="interface in org.apache.hadoop.hbase.master.normalizer">NormalizationPlan</a>&nbsp;plan2)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html b/devapidocs/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html
index 1c1e2b3..b303819 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.62">SimpleRegionNormalizer</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.64">SimpleRegionNormalizer</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizer.html" title="interface in org.apache.hadoop.hbase.master.normalizer">RegionNormalizer</a></pre>
 <div class="block">Simple implementation of region normalizer.
@@ -291,7 +291,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/
 <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/normalizer/SimpleRegionNormalizer.html#line.64">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.66">LOG</a></pre>
 </li>
 </ul>
 <a name="minRegionCount">
@@ -300,7 +300,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/
 <ul class="blockList">
 <li class="blockList">
 <h4>minRegionCount</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.65">minRegionCount</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.67">minRegionCount</a></pre>
 </li>
 </ul>
 <a name="masterServices">
@@ -309,7 +309,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/
 <ul class="blockList">
 <li class="blockList">
 <h4>masterServices</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.66">masterServices</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.68">masterServices</a></pre>
 </li>
 </ul>
 <a name="masterRpcServices">
@@ -318,7 +318,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/
 <ul class="blockList">
 <li class="blockList">
 <h4>masterRpcServices</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.html" title="class in org.apache.hadoop.hbase.master">MasterRpcServices</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.67">masterRpcServices</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.html" title="class in org.apache.hadoop.hbase.master">MasterRpcServices</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.69">masterRpcServices</a></pre>
 </li>
 </ul>
 <a name="skippedCount">
@@ -327,7 +327,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/
 <ul class="blockList">
 <li class="blockList">
 <h4>skippedCount</h4>
-<pre>private static&nbsp;long[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.68">skippedCount</a></pre>
+<pre>private static&nbsp;long[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.70">skippedCount</a></pre>
 </li>
 </ul>
 <a name="planComparator">
@@ -336,7 +336,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/
 <ul class="blockListLast">
 <li class="blockList">
 <h4>planComparator</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/NormalizationPlan.html" title="interface in org.apache.hadoop.hbase.master.normalizer">NormalizationPlan</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.117">planComparator</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/NormalizationPlan.html" title="interface in org.apache.hadoop.hbase.master.normalizer">NormalizationPlan</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.119">planComparator</a></pre>
 </li>
 </ul>
 </li>
@@ -353,7 +353,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SimpleRegionNormalizer</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.70">SimpleRegionNormalizer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.72">SimpleRegionNormalizer</a>()</pre>
 </li>
 </ul>
 </li>
@@ -370,7 +370,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/
 <ul class="blockList">
 <li class="blockList">
 <h4>setMasterServices</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.78">setMasterServices</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.80">setMasterServices</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices)</pre>
 <div class="block">Set the master service.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -386,7 +386,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/
 <ul class="blockList">
 <li class="blockList">
 <h4>setMasterRpcServices</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.83">setMasterRpcServices</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.html" title="class in org.apache.hadoop.hbase.master">MasterRpcServices</a>&nbsp;masterRpcServices)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.85">setMasterRpcServices</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.html" title="class in org.apache.hadoop.hbase.master">MasterRpcServices</a>&nbsp;masterRpcServices)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizer.html#setMasterRpcServices-org.apache.hadoop.hbase.master.MasterRpcServices-">RegionNormalizer</a></code></span></div>
 <div class="block">Set the master RPC service. Must be called before first call to
  <a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizer.html#computePlanForTable-org.apache.hadoop.hbase.TableName-"><code>RegionNormalizer.computePlanForTable(TableName)</code></a>.</div>
@@ -404,7 +404,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/
 <ul class="blockList">
 <li class="blockList">
 <h4>planSkipped</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.88">planSkipped</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.90">planSkipped</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri,
                         <a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/NormalizationPlan.PlanType.html" title="enum in org.apache.hadoop.hbase.master.normalizer">NormalizationPlan.PlanType</a>&nbsp;type)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizer.html#planSkipped-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.PlanType-">RegionNormalizer</a></code></span></div>
 <div class="block">Notification for the case where plan couldn't be executed due to constraint violation, such as
@@ -424,7 +424,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/
 <ul class="blockList">
 <li class="blockList">
 <h4>getSkippedCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.93">getSkippedCount</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/NormalizationPlan.PlanType.html" title="enum in org.apache.hadoop.hbase.master.normalizer">NormalizationPlan.PlanType</a>&nbsp;type)</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.95">getSkippedCount</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/NormalizationPlan.PlanType.html" title="enum in org.apache.hadoop.hbase.master.normalizer">NormalizationPlan.PlanType</a>&nbsp;type)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizer.html#getSkippedCount-org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.PlanType-">getSkippedCount</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizer.html" title="interface in org.apache.hadoop.hbase.master.normalizer">RegionNormalizer</a></code></dd>
@@ -441,7 +441,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/
 <ul class="blockList">
 <li class="blockList">
 <h4>computePlanForTable</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/master/normalizer/NormalizationPlan.html" title="interface in org.apache.hadoop.hbase.master.normalizer">NormalizationPlan</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.127">computePlanForTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)
+<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/master/normalizer/NormalizationPlan.html" title="interface in org.apache.hadoop.hbase.master.normalizer">NormalizationPlan</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.129">computePlanForTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)
                                             throws <a href="../../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <div class="block">Computes next most "urgent" normalization action on the table.
  Action may be either a split, or a merge, or no action.</div>
@@ -463,7 +463,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getRegionSize</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.216">getRegionSize</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)</pre>
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html#line.242">getRegionSize</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/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 5202f82..4c308e0 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -349,9 +349,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.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/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/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 f86b651..8344765 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -216,10 +216,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/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/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">PeerProcedureInterface.PeerOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/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 dcd371f..92c3845 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -437,19 +437,19 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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/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/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/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/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
index 3c04230..ebe1bde 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1869">ProcedureExecutor.WorkerMonitor</a>
+<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1861">ProcedureExecutor.WorkerMonitor</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.html" title="class in org.apache.hadoop.hbase.procedure2">InlineChore</a></pre>
 </li>
 </ul>
@@ -277,7 +277,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockList">
 <li class="blockList">
 <h4>WORKER_MONITOR_INTERVAL_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1870">WORKER_MONITOR_INTERVAL_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1862">WORKER_MONITOR_INTERVAL_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.WorkerMonitor.WORKER_MONITOR_INTERVAL_CONF_KEY">Constant Field Values</a></dd>
@@ -290,7 +290,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_WORKER_MONITOR_INTERVAL</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1872">DEFAULT_WORKER_MONITOR_INTERVAL</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1864">DEFAULT_WORKER_MONITOR_INTERVAL</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.WorkerMonitor.DEFAULT_WORKER_MONITOR_INTERVAL">Constant Field Values</a></dd>
@@ -303,7 +303,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockList">
 <li class="blockList">
 <h4>WORKER_STUCK_THRESHOLD_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1874">WORKER_STUCK_THRESHOLD_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1866">WORKER_STUCK_THRESHOLD_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.WorkerMonitor.WORKER_STUCK_THRESHOLD_CONF_KEY">Constant Field Values</a></dd>
@@ -316,7 +316,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_WORKER_STUCK_THRESHOLD</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1876">DEFAULT_WORKER_STUCK_THRESHOLD</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1868">DEFAULT_WORKER_STUCK_THRESHOLD</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.WorkerMonitor.DEFAULT_WORKER_STUCK_THRESHOLD">Constant Field Values</a></dd>
@@ -329,7 +329,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockList">
 <li class="blockList">
 <h4>WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1878">WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1870">WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.WorkerMonitor.WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY">Constant Field Values</a></dd>
@@ -342,7 +342,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_WORKER_ADD_STUCK_PERCENTAGE</h4>
-<pre>private static final&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1880">DEFAULT_WORKER_ADD_STUCK_PERCENTAGE</a></pre>
+<pre>private static final&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1872">DEFAULT_WORKER_ADD_STUCK_PERCENTAGE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.WorkerMonitor.DEFAULT_WORKER_ADD_STUCK_PERCENTAGE">Constant Field Values</a></dd>
@@ -355,7 +355,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockList">
 <li class="blockList">
 <h4>addWorkerStuckPercentage</h4>
-<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1882">addWorkerStuckPercentage</a></pre>
+<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1874">addWorkerStuckPercentage</a></pre>
 </li>
 </ul>
 <a name="timeoutInterval">
@@ -364,7 +364,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockList">
 <li class="blockList">
 <h4>timeoutInterval</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1883">timeoutInterval</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1875">timeoutInterval</a></pre>
 </li>
 </ul>
 <a name="stuckThreshold">
@@ -373,7 +373,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>stuckThreshold</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1884">stuckThreshold</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1876">stuckThreshold</a></pre>
 </li>
 </ul>
 </li>
@@ -390,7 +390,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WorkerMonitor</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1886">WorkerMonitor</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1878">WorkerMonitor</a>()</pre>
 </li>
 </ul>
 </li>
@@ -407,7 +407,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1891">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1883">run</a>()</pre>
 </li>
 </ul>
 <a name="checkForStuckWorkers--">
@@ -416,7 +416,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockList">
 <li class="blockList">
 <h4>checkForStuckWorkers</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1899">checkForStuckWorkers</a>()</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1891">checkForStuckWorkers</a>()</pre>
 </li>
 </ul>
 <a name="checkThreadCount-int-">
@@ -425,7 +425,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockList">
 <li class="blockList">
 <h4>checkThreadCount</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1915">checkThreadCount</a>(int&nbsp;stuckCount)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1907">checkThreadCount</a>(int&nbsp;stuckCount)</pre>
 </li>
 </ul>
 <a name="refreshConfig--">
@@ -434,7 +434,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshConfig</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1934">refreshConfig</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1926">refreshConfig</a>()</pre>
 </li>
 </ul>
 <a name="getTimeoutInterval--">
@@ -443,7 +443,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getTimeoutInterval</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1944">getTimeoutInterval</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1936">getTimeoutInterval</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.html#getTimeoutInterval--">getTimeoutInterval</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.html" title="class in org.apache.hadoop.hbase.procedure2">InlineChore</a></code></dd>


[14/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
index fc17f3d..16c2238 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
@@ -158,1296 +158,1356 @@
 <span class="sourceLineNo">150</span>  private static final Bytes NORMALIZATION_ENABLED_KEY<a name="line.150"></a>
 <span class="sourceLineNo">151</span>          = new Bytes(Bytes.toBytes(NORMALIZATION_ENABLED));<a name="line.151"></a>
 <span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  /**<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   * Default durability for HTD is USE_DEFAULT, which defaults to HBase-global<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   * default value<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  private static final Durability DEFAULT_DURABLITY = Durability.USE_DEFAULT;<a name="line.157"></a>
+<span class="sourceLineNo">153</span>  @InterfaceAudience.Private<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  public static final String NORMALIZER_TARGET_REGION_COUNT =<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      "NORMALIZER_TARGET_REGION_COUNT";<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  private static final Bytes NORMALIZER_TARGET_REGION_COUNT_KEY =<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      new Bytes(Bytes.toBytes(NORMALIZER_TARGET_REGION_COUNT));<a name="line.157"></a>
 <span class="sourceLineNo">158</span><a name="line.158"></a>
 <span class="sourceLineNo">159</span>  @InterfaceAudience.Private<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  public static final String PRIORITY = "PRIORITY";<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  private static final Bytes PRIORITY_KEY<a name="line.161"></a>
-<span class="sourceLineNo">162</span>          = new Bytes(Bytes.toBytes(PRIORITY));<a name="line.162"></a>
+<span class="sourceLineNo">160</span>  public static final String NORMALIZER_TARGET_REGION_SIZE = "NORMALIZER_TARGET_REGION_SIZE";<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  private static final Bytes NORMALIZER_TARGET_REGION_SIZE_KEY =<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      new Bytes(Bytes.toBytes(NORMALIZER_TARGET_REGION_SIZE));<a name="line.162"></a>
 <span class="sourceLineNo">163</span><a name="line.163"></a>
 <span class="sourceLineNo">164</span>  /**<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * Relative priority of the table used for rpc scheduling<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   */<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  private static final int DEFAULT_PRIORITY = HConstants.NORMAL_QOS;<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>  /**<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * Constant that denotes whether the table is READONLY by default and is false<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   */<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  public static final boolean DEFAULT_READONLY = false;<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>  /**<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * Constant that denotes whether the table is compaction enabled by default<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  public static final boolean DEFAULT_COMPACTION_ENABLED = true;<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  /**<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * Constant that denotes whether the table is normalized by default.<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   */<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  public static final boolean DEFAULT_NORMALIZATION_ENABLED = false;<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  /**<a name="line.184"></a>
-<span class="sourceLineNo">185</span>   * Constant that denotes the maximum default size of the memstore in bytes after which<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   * the contents are flushed to the store files.<a name="line.186"></a>
+<span class="sourceLineNo">165</span>   * Default durability for HTD is USE_DEFAULT, which defaults to HBase-global<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * default value<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  private static final Durability DEFAULT_DURABLITY = Durability.USE_DEFAULT;<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  @InterfaceAudience.Private<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  public static final String PRIORITY = "PRIORITY";<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  private static final Bytes PRIORITY_KEY<a name="line.172"></a>
+<span class="sourceLineNo">173</span>          = new Bytes(Bytes.toBytes(PRIORITY));<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>  /**<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   * Relative priority of the table used for rpc scheduling<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   */<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  private static final int DEFAULT_PRIORITY = HConstants.NORMAL_QOS;<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span>  /**<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * Constant that denotes whether the table is READONLY by default and is false<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   */<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  public static final boolean DEFAULT_READONLY = false;<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  /**<a name="line.185"></a>
+<span class="sourceLineNo">186</span>   * Constant that denotes whether the table is compaction enabled by default<a name="line.186"></a>
 <span class="sourceLineNo">187</span>   */<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  public static final long DEFAULT_MEMSTORE_FLUSH_SIZE = 1024 * 1024 * 128L;<a name="line.188"></a>
+<span class="sourceLineNo">188</span>  public static final boolean DEFAULT_COMPACTION_ENABLED = true;<a name="line.188"></a>
 <span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  public static final int DEFAULT_REGION_REPLICATION = 1;<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span>  public static final boolean DEFAULT_REGION_MEMSTORE_REPLICATION = true;<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>  private final static Map&lt;String, String&gt; DEFAULT_VALUES = new HashMap&lt;&gt;();<a name="line.194"></a>
-<span class="sourceLineNo">195</span>  private final static Set&lt;Bytes&gt; RESERVED_KEYWORDS = new HashSet&lt;&gt;();<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>  static {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    DEFAULT_VALUES.put(MAX_FILESIZE,<a name="line.198"></a>
-<span class="sourceLineNo">199</span>            String.valueOf(HConstants.DEFAULT_MAX_FILE_SIZE));<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    DEFAULT_VALUES.put(READONLY, String.valueOf(DEFAULT_READONLY));<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    DEFAULT_VALUES.put(MEMSTORE_FLUSHSIZE,<a name="line.201"></a>
-<span class="sourceLineNo">202</span>            String.valueOf(DEFAULT_MEMSTORE_FLUSH_SIZE));<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    DEFAULT_VALUES.put(DURABILITY, DEFAULT_DURABLITY.name()); //use the enum name<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    DEFAULT_VALUES.put(REGION_REPLICATION, String.valueOf(DEFAULT_REGION_REPLICATION));<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    DEFAULT_VALUES.put(NORMALIZATION_ENABLED, String.valueOf(DEFAULT_NORMALIZATION_ENABLED));<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    DEFAULT_VALUES.put(PRIORITY, String.valueOf(DEFAULT_PRIORITY));<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    DEFAULT_VALUES.keySet().stream()<a name="line.207"></a>
-<span class="sourceLineNo">208</span>            .map(s -&gt; new Bytes(Bytes.toBytes(s))).forEach(RESERVED_KEYWORDS::add);<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    RESERVED_KEYWORDS.add(IS_META_KEY);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  }<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>  @InterfaceAudience.Private<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  public final static String NAMESPACE_FAMILY_INFO = "info";<a name="line.213"></a>
-<span class="sourceLineNo">214</span>  @InterfaceAudience.Private<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  public final static byte[] NAMESPACE_FAMILY_INFO_BYTES = Bytes.toBytes(NAMESPACE_FAMILY_INFO);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  @InterfaceAudience.Private<a name="line.216"></a>
-<span class="sourceLineNo">217</span>  public final static byte[] NAMESPACE_COL_DESC_BYTES = Bytes.toBytes("d");<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span>  /**<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * &lt;pre&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * Pattern that matches a coprocessor specification. Form is:<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * {@code &lt;coprocessor jar file location&gt; '|' &lt;class name&gt; ['|' &lt;priority&gt; ['|' &lt;arguments&gt;]]}<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * where arguments are {@code &lt;KEY&gt; '=' &lt;VALUE&gt; [,...]}<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * For example: {@code hdfs:///foo.jar|com.foo.FooRegionObserver|1001|arg1=1,arg2=2}<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * &lt;/pre&gt;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   */<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  private static final Pattern CP_HTD_ATTR_VALUE_PATTERN =<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    Pattern.compile("(^[^\\|]*)\\|([^\\|]+)\\|[\\s]*([\\d]*)[\\s]*(\\|.*)?$");<a name="line.228"></a>
+<span class="sourceLineNo">190</span>  /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * Constant that denotes whether the table is normalized by default.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  public static final boolean DEFAULT_NORMALIZATION_ENABLED = false;<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>  /**<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   * Constant that denotes the maximum default size of the memstore in bytes after which<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * the contents are flushed to the store files.<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   */<a name="line.198"></a>
+<span class="sourceLineNo">199</span>  public static final long DEFAULT_MEMSTORE_FLUSH_SIZE = 1024 * 1024 * 128L;<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  public static final int DEFAULT_REGION_REPLICATION = 1;<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>  public static final boolean DEFAULT_REGION_MEMSTORE_REPLICATION = true;<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>  private final static Map&lt;String, String&gt; DEFAULT_VALUES = new HashMap&lt;&gt;();<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  private final static Set&lt;Bytes&gt; RESERVED_KEYWORDS = new HashSet&lt;&gt;();<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>  static {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    DEFAULT_VALUES.put(MAX_FILESIZE,<a name="line.209"></a>
+<span class="sourceLineNo">210</span>            String.valueOf(HConstants.DEFAULT_MAX_FILE_SIZE));<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    DEFAULT_VALUES.put(READONLY, String.valueOf(DEFAULT_READONLY));<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    DEFAULT_VALUES.put(MEMSTORE_FLUSHSIZE,<a name="line.212"></a>
+<span class="sourceLineNo">213</span>            String.valueOf(DEFAULT_MEMSTORE_FLUSH_SIZE));<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    DEFAULT_VALUES.put(DURABILITY, DEFAULT_DURABLITY.name()); //use the enum name<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    DEFAULT_VALUES.put(REGION_REPLICATION, String.valueOf(DEFAULT_REGION_REPLICATION));<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    DEFAULT_VALUES.put(NORMALIZATION_ENABLED, String.valueOf(DEFAULT_NORMALIZATION_ENABLED));<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    DEFAULT_VALUES.put(PRIORITY, String.valueOf(DEFAULT_PRIORITY));<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    DEFAULT_VALUES.keySet().stream()<a name="line.218"></a>
+<span class="sourceLineNo">219</span>            .map(s -&gt; new Bytes(Bytes.toBytes(s))).forEach(RESERVED_KEYWORDS::add);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    RESERVED_KEYWORDS.add(IS_META_KEY);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span>  @InterfaceAudience.Private<a name="line.223"></a>
+<span class="sourceLineNo">224</span>  public final static String NAMESPACE_FAMILY_INFO = "info";<a name="line.224"></a>
+<span class="sourceLineNo">225</span>  @InterfaceAudience.Private<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  public final static byte[] NAMESPACE_FAMILY_INFO_BYTES = Bytes.toBytes(NAMESPACE_FAMILY_INFO);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  @InterfaceAudience.Private<a name="line.227"></a>
+<span class="sourceLineNo">228</span>  public final static byte[] NAMESPACE_COL_DESC_BYTES = Bytes.toBytes("d");<a name="line.228"></a>
 <span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>  private static final String CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN = "[^=,]+";<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  private static final String CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN = "[^,]+";<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  private static final Pattern CP_HTD_ATTR_VALUE_PARAM_PATTERN = Pattern.compile(<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    "(" + CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN + ")=(" +<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN + "),?");<a name="line.234"></a>
-<span class="sourceLineNo">235</span>  private static final Pattern CP_HTD_ATTR_KEY_PATTERN =<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    Pattern.compile("^coprocessor\\$([0-9]+)$", Pattern.CASE_INSENSITIVE);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  /**<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * Table descriptor for namespace table<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   */<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  // TODO We used to set CacheDataInL1 for NS table. When we have BucketCache in file mode, now the<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  // NS data goes to File mode BC only. Test how that affect the system. If too much, we have to<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  // rethink about adding back the setCacheDataInL1 for NS table.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public static final TableDescriptor NAMESPACE_TABLEDESC<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    = TableDescriptorBuilder.newBuilder(TableName.NAMESPACE_TABLE_NAME)<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      .setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(NAMESPACE_FAMILY_INFO_BYTES)<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        // Ten is arbitrary number.  Keep versions to help debugging.<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        .setMaxVersions(10)<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        .setInMemory(true)<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        .setBlocksize(8 * 1024)<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        .setScope(HConstants.REPLICATION_SCOPE_LOCAL)<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        .build())<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      .build();<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  private final ModifyableTableDescriptor desc;<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>  /**<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   * @param desc The table descriptor to serialize<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * @return This instance serialized with pb with pb magic prefix<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  public static byte[] toByteArray(TableDescriptor desc) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (desc instanceof ModifyableTableDescriptor) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      return ((ModifyableTableDescriptor) desc).toByteArray();<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    return new ModifyableTableDescriptor(desc).toByteArray();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
+<span class="sourceLineNo">230</span>  /**<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * &lt;pre&gt;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * Pattern that matches a coprocessor specification. Form is:<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * {@code &lt;coprocessor jar file location&gt; '|' &lt;class name&gt; ['|' &lt;priority&gt; ['|' &lt;arguments&gt;]]}<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   * where arguments are {@code &lt;KEY&gt; '=' &lt;VALUE&gt; [,...]}<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   * For example: {@code hdfs:///foo.jar|com.foo.FooRegionObserver|1001|arg1=1,arg2=2}<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * &lt;/pre&gt;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   */<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  private static final Pattern CP_HTD_ATTR_VALUE_PATTERN =<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    Pattern.compile("(^[^\\|]*)\\|([^\\|]+)\\|[\\s]*([\\d]*)[\\s]*(\\|.*)?$");<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>  private static final String CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN = "[^=,]+";<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  private static final String CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN = "[^,]+";<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  private static final Pattern CP_HTD_ATTR_VALUE_PARAM_PATTERN = Pattern.compile(<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    "(" + CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN + ")=(" +<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN + "),?");<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  private static final Pattern CP_HTD_ATTR_KEY_PATTERN =<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    Pattern.compile("^coprocessor\\$([0-9]+)$", Pattern.CASE_INSENSITIVE);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  /**<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * Table descriptor for namespace table<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   */<a name="line.250"></a>
+<span class="sourceLineNo">251</span>  // TODO We used to set CacheDataInL1 for NS table. When we have BucketCache in file mode, now the<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  // NS data goes to File mode BC only. Test how that affect the system. If too much, we have to<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  // rethink about adding back the setCacheDataInL1 for NS table.<a name="line.253"></a>
+<span class="sourceLineNo">254</span>  public static final TableDescriptor NAMESPACE_TABLEDESC<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    = TableDescriptorBuilder.newBuilder(TableName.NAMESPACE_TABLE_NAME)<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      .setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(NAMESPACE_FAMILY_INFO_BYTES)<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        // Ten is arbitrary number.  Keep versions to help debugging.<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        .setMaxVersions(10)<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        .setInMemory(true)<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        .setBlocksize(8 * 1024)<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        .setScope(HConstants.REPLICATION_SCOPE_LOCAL)<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        .build())<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      .build();<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  private final ModifyableTableDescriptor desc;<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>   * The input should be created by {@link #toByteArray}.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * @param pbBytes A pb serialized TableDescriptor instance with pb magic prefix<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   * @return This instance serialized with pb with pb magic prefix<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * @throws org.apache.hadoop.hbase.exceptions.DeserializationException<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   */<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  public static TableDescriptor parseFrom(byte[] pbBytes) throws DeserializationException {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    return ModifyableTableDescriptor.parseFrom(pbBytes);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public static TableDescriptorBuilder newBuilder(final TableName name) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    return new TableDescriptorBuilder(name);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  public static TableDescriptor copy(TableDescriptor desc) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    return new ModifyableTableDescriptor(desc);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>  public static TableDescriptor copy(TableName name, TableDescriptor desc) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    return new ModifyableTableDescriptor(name, desc);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span>  /**<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * Copy all values, families, and name from the input.<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * @param desc The desciptor to copy<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   * @return A clone of input<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   */<a name="line.292"></a>
-<span class="sourceLineNo">293</span>  public static TableDescriptorBuilder newBuilder(final TableDescriptor desc) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    return new TableDescriptorBuilder(desc);<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>  private TableDescriptorBuilder(final TableName name) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    this.desc = new ModifyableTableDescriptor(name);<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>  private TableDescriptorBuilder(final TableDescriptor desc) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    this.desc = new ModifyableTableDescriptor(desc);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>  public TableDescriptorBuilder setCoprocessor(String className) throws IOException {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    return setCoprocessor(CoprocessorDescriptorBuilder.of(className));<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>  public TableDescriptorBuilder setCoprocessor(CoprocessorDescriptor cpDesc) throws IOException {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    desc.setCoprocessor(Objects.requireNonNull(cpDesc));<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    return this;<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>  public TableDescriptorBuilder setCoprocessors(Collection&lt;CoprocessorDescriptor&gt; cpDescs)<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    throws IOException {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    for (CoprocessorDescriptor cpDesc : cpDescs) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      desc.setCoprocessor(cpDesc);<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    return this;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  public TableDescriptorBuilder setColumnFamily(final ColumnFamilyDescriptor family) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    desc.setColumnFamily(Objects.requireNonNull(family));<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    return this;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  }<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span>  public TableDescriptorBuilder setColumnFamilies(<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    final Collection&lt;ColumnFamilyDescriptor&gt; families) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    families.forEach(desc::setColumnFamily);<a name="line.329"></a>
+<span class="sourceLineNo">267</span>   * @param desc The table descriptor to serialize<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   * @return This instance serialized with pb with pb magic prefix<a name="line.268"></a>
+<span class="sourceLineNo">269</span>   */<a name="line.269"></a>
+<span class="sourceLineNo">270</span>  public static byte[] toByteArray(TableDescriptor desc) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    if (desc instanceof ModifyableTableDescriptor) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      return ((ModifyableTableDescriptor) desc).toByteArray();<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    return new ModifyableTableDescriptor(desc).toByteArray();<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  }<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>  /**<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   * The input should be created by {@link #toByteArray}.<a name="line.278"></a>
+<span class="sourceLineNo">279</span>   * @param pbBytes A pb serialized TableDescriptor instance with pb magic prefix<a name="line.279"></a>
+<span class="sourceLineNo">280</span>   * @return This instance serialized with pb with pb magic prefix<a name="line.280"></a>
+<span class="sourceLineNo">281</span>   * @throws org.apache.hadoop.hbase.exceptions.DeserializationException<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   */<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public static TableDescriptor parseFrom(byte[] pbBytes) throws DeserializationException {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    return ModifyableTableDescriptor.parseFrom(pbBytes);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  }<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span>  public static TableDescriptorBuilder newBuilder(final TableName name) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    return new TableDescriptorBuilder(name);<a name="line.288"></a>
+<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span>  public static TableDescriptor copy(TableDescriptor desc) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    return new ModifyableTableDescriptor(desc);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>  public static TableDescriptor copy(TableName name, TableDescriptor desc) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    return new ModifyableTableDescriptor(name, desc);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  /**<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * Copy all values, families, and name from the input.<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   * @param desc The desciptor to copy<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * @return A clone of input<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   */<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public static TableDescriptorBuilder newBuilder(final TableDescriptor desc) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    return new TableDescriptorBuilder(desc);<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>  private TableDescriptorBuilder(final TableName name) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    this.desc = new ModifyableTableDescriptor(name);<a name="line.309"></a>
+<span class="sourceLineNo">310</span>  }<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span>  private TableDescriptorBuilder(final TableDescriptor desc) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    this.desc = new ModifyableTableDescriptor(desc);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  }<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span>  public TableDescriptorBuilder setCoprocessor(String className) throws IOException {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    return setCoprocessor(CoprocessorDescriptorBuilder.of(className));<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  public TableDescriptorBuilder setCoprocessor(CoprocessorDescriptor cpDesc) throws IOException {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    desc.setCoprocessor(Objects.requireNonNull(cpDesc));<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    return this;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>  public TableDescriptorBuilder setCoprocessors(Collection&lt;CoprocessorDescriptor&gt; cpDescs)<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    throws IOException {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    for (CoprocessorDescriptor cpDesc : cpDescs) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      desc.setCoprocessor(cpDesc);<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    }<a name="line.329"></a>
 <span class="sourceLineNo">330</span>    return this;<a name="line.330"></a>
 <span class="sourceLineNo">331</span>  }<a name="line.331"></a>
 <span class="sourceLineNo">332</span><a name="line.332"></a>
-<span class="sourceLineNo">333</span>  public TableDescriptorBuilder modifyColumnFamily(final ColumnFamilyDescriptor family) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    desc.modifyColumnFamily(Objects.requireNonNull(family));<a name="line.334"></a>
+<span class="sourceLineNo">333</span>  public TableDescriptorBuilder setColumnFamily(final ColumnFamilyDescriptor family) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    desc.setColumnFamily(Objects.requireNonNull(family));<a name="line.334"></a>
 <span class="sourceLineNo">335</span>    return this;<a name="line.335"></a>
 <span class="sourceLineNo">336</span>  }<a name="line.336"></a>
 <span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>  public TableDescriptorBuilder removeValue(Bytes key) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    desc.removeValue(key);<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    return this;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>  }<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>  public TableDescriptorBuilder removeValue(byte[] key) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    desc.removeValue(key);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    return this;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>  }<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>  public TableDescriptorBuilder removeColumnFamily(final byte[] name) {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    desc.removeColumnFamily(name);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    return this;<a name="line.350"></a>
-<span class="sourceLineNo">351</span>  }<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span>  public TableDescriptorBuilder removeCoprocessor(String className) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    desc.removeCoprocessor(className);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    return this;<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>  public TableDescriptorBuilder setCompactionEnabled(final boolean isEnable) {<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    desc.setCompactionEnabled(isEnable);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return this;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  public TableDescriptorBuilder setDurability(Durability durability) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    desc.setDurability(durability);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    return this;<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>  public TableDescriptorBuilder setFlushPolicyClassName(String clazz) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    desc.setFlushPolicyClassName(clazz);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return this;<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  }<a name="line.371"></a>
-<span class="sourceLineNo">372</span><a name="line.372"></a>
-<span class="sourceLineNo">373</span>  public TableDescriptorBuilder setMaxFileSize(long maxFileSize) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    desc.setMaxFileSize(maxFileSize);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    return this;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  public TableDescriptorBuilder setMemStoreFlushSize(long memstoreFlushSize) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    desc.setMemStoreFlushSize(memstoreFlushSize);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    return this;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  public TableDescriptorBuilder setNormalizationEnabled(final boolean isEnable) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    desc.setNormalizationEnabled(isEnable);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    return this;<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>  @Deprecated<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  public TableDescriptorBuilder setOwner(User owner) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    desc.setOwner(owner);<a name="line.390"></a>
+<span class="sourceLineNo">338</span>  public TableDescriptorBuilder setColumnFamilies(<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    final Collection&lt;ColumnFamilyDescriptor&gt; families) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    families.forEach(desc::setColumnFamily);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    return this;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>  }<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>  public TableDescriptorBuilder modifyColumnFamily(final ColumnFamilyDescriptor family) {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    desc.modifyColumnFamily(Objects.requireNonNull(family));<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    return this;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span>  public TableDescriptorBuilder removeValue(Bytes key) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    desc.removeValue(key);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    return this;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  public TableDescriptorBuilder removeValue(byte[] key) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    desc.removeValue(key);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    return this;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>  public TableDescriptorBuilder removeColumnFamily(final byte[] name) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    desc.removeColumnFamily(name);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    return this;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>  }<a name="line.362"></a>
+<span class="sourceLineNo">363</span><a name="line.363"></a>
+<span class="sourceLineNo">364</span>  public TableDescriptorBuilder removeCoprocessor(String className) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    desc.removeCoprocessor(className);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    return this;<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>  public TableDescriptorBuilder setCompactionEnabled(final boolean isEnable) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    desc.setCompactionEnabled(isEnable);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    return this;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>  }<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span>  public TableDescriptorBuilder setDurability(Durability durability) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    desc.setDurability(durability);<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    return this;<a name="line.376"></a>
+<span class="sourceLineNo">377</span>  }<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span>  public TableDescriptorBuilder setFlushPolicyClassName(String clazz) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    desc.setFlushPolicyClassName(clazz);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    return this;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
+<span class="sourceLineNo">383</span><a name="line.383"></a>
+<span class="sourceLineNo">384</span>  public TableDescriptorBuilder setMaxFileSize(long maxFileSize) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    desc.setMaxFileSize(maxFileSize);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    return this;<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>  public TableDescriptorBuilder setMemStoreFlushSize(long memstoreFlushSize) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    desc.setMemStoreFlushSize(memstoreFlushSize);<a name="line.390"></a>
 <span class="sourceLineNo">391</span>    return this;<a name="line.391"></a>
 <span class="sourceLineNo">392</span>  }<a name="line.392"></a>
 <span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>  @Deprecated<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  public TableDescriptorBuilder setOwnerString(String ownerString) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    desc.setOwnerString(ownerString);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    return this;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  }<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span>  public TableDescriptorBuilder setPriority(int priority) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    desc.setPriority(priority);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    return this;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
-<span class="sourceLineNo">404</span><a name="line.404"></a>
-<span class="sourceLineNo">405</span>  public TableDescriptorBuilder setReadOnly(final boolean readOnly) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    desc.setReadOnly(readOnly);<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    return this;<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>  public TableDescriptorBuilder setRegionMemStoreReplication(boolean memstoreReplication) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    desc.setRegionMemStoreReplication(memstoreReplication);<a name="line.411"></a>
+<span class="sourceLineNo">394</span>  public TableDescriptorBuilder setNormalizerTargetRegionCount(final int regionCount) {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    desc.setNormalizerTargetRegionCount(regionCount);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    return this;<a name="line.396"></a>
+<span class="sourceLineNo">397</span>  }<a name="line.397"></a>
+<span class="sourceLineNo">398</span><a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public TableDescriptorBuilder setNormalizerTargetRegionSize(final long regionSize) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    desc.setNormalizerTargetRegionSize(regionSize);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    return this;<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  public TableDescriptorBuilder setNormalizationEnabled(final boolean isEnable) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    desc.setNormalizationEnabled(isEnable);<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    return this;<a name="line.406"></a>
+<span class="sourceLineNo">407</span>  }<a name="line.407"></a>
+<span class="sourceLineNo">408</span><a name="line.408"></a>
+<span class="sourceLineNo">409</span>  @Deprecated<a name="line.409"></a>
+<span class="sourceLineNo">410</span>  public TableDescriptorBuilder setOwner(User owner) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    desc.setOwner(owner);<a name="line.411"></a>
 <span class="sourceLineNo">412</span>    return this;<a name="line.412"></a>
 <span class="sourceLineNo">413</span>  }<a name="line.413"></a>
 <span class="sourceLineNo">414</span><a name="line.414"></a>
-<span class="sourceLineNo">415</span>  public TableDescriptorBuilder setRegionReplication(int regionReplication) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    desc.setRegionReplication(regionReplication);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    return this;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  }<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span>  public TableDescriptorBuilder setRegionSplitPolicyClassName(String clazz) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    desc.setRegionSplitPolicyClassName(clazz);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    return this;<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>  public TableDescriptorBuilder setValue(final String key, final String value) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    desc.setValue(key, value);<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    return this;<a name="line.427"></a>
-<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span>  public TableDescriptorBuilder setValue(final Bytes key, final Bytes value) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    desc.setValue(key, value);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    return this;<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>  public TableDescriptorBuilder setValue(final byte[] key, final byte[] value) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    desc.setValue(key, value);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    return this;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  /**<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   * Sets replication scope all &amp; only the columns already in the builder. Columns added later won't<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * be backfilled with replication scope.<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   * @param scope replication scope<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * @return a TableDescriptorBuilder<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   */<a name="line.445"></a>
-<span class="sourceLineNo">446</span>  public TableDescriptorBuilder setReplicationScope(int scope) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    Map&lt;byte[], ColumnFamilyDescriptor&gt; newFamilies = new TreeMap&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    newFamilies.putAll(desc.families);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    newFamilies<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        .forEach((cf, cfDesc) -&gt; {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>          desc.removeColumnFamily(cf);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          desc.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(cfDesc).setScope(scope)<a name="line.452"></a>
-<span class="sourceLineNo">453</span>              .build());<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        });<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    return this;<a name="line.455"></a>
-<span class="sourceLineNo">456</span>  }<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span>  public TableDescriptor build() {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    return new ModifyableTableDescriptor(desc);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>  }<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span>  /**<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * TODO: make this private after removing the HTableDescriptor<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   */<a name="line.464"></a>
-<span class="sourceLineNo">465</span>  @InterfaceAudience.Private<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  public static class ModifyableTableDescriptor<a name="line.466"></a>
-<span class="sourceLineNo">467</span>          implements TableDescriptor, Comparable&lt;ModifyableTableDescriptor&gt; {<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>    private final TableName name;<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 map which holds the metadata information of the table. This metadata<a name="line.472"></a>
-<span class="sourceLineNo">473</span>     * includes values like IS_META, SPLIT_POLICY, MAX_FILE_SIZE,<a name="line.473"></a>
-<span class="sourceLineNo">474</span>     * READONLY, MEMSTORE_FLUSHSIZE etc...<a name="line.474"></a>
-<span class="sourceLineNo">475</span>     */<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    private final Map&lt;Bytes, Bytes&gt; values = new HashMap&lt;&gt;();<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>     * Maps column family name to the respective FamilyDescriptors<a name="line.479"></a>
-<span class="sourceLineNo">480</span>     */<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    private final Map&lt;byte[], ColumnFamilyDescriptor&gt; families<a name="line.481"></a>
-<span class="sourceLineNo">482</span>            = new TreeMap&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>    /**<a name="line.484"></a>
-<span class="sourceLineNo">485</span>     * Construct a table descriptor specifying a TableName object<a name="line.485"></a>
-<span class="sourceLineNo">486</span>     *<a name="line.486"></a>
-<span class="sourceLineNo">487</span>     * @param name Table name.<a name="line.487"></a>
-<span class="sourceLineNo">488</span>     * TODO: make this private after removing the HTableDescriptor<a name="line.488"></a>
-<span class="sourceLineNo">489</span>     */<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    @InterfaceAudience.Private<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    public ModifyableTableDescriptor(final TableName name) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      this(name, Collections.EMPTY_LIST, Collections.EMPTY_MAP);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>    private ModifyableTableDescriptor(final TableDescriptor desc) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      this(desc.getTableName(), Arrays.asList(desc.getColumnFamilies()), desc.getValues());<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
+<span class="sourceLineNo">415</span>  @Deprecated<a name="line.415"></a>
+<span class="sourceLineNo">416</span>  public TableDescriptorBuilder setOwnerString(String ownerString) {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    desc.setOwnerString(ownerString);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    return this;<a name="line.418"></a>
+<span class="sourceLineNo">419</span>  }<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span>  public TableDescriptorBuilder setPriority(int priority) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    desc.setPriority(priority);<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    return this;<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  }<a name="line.424"></a>
+<span class="sourceLineNo">425</span><a name="line.425"></a>
+<span class="sourceLineNo">426</span>  public TableDescriptorBuilder setReadOnly(final boolean readOnly) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    desc.setReadOnly(readOnly);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    return this;<a name="line.428"></a>
+<span class="sourceLineNo">429</span>  }<a name="line.429"></a>
+<span class="sourceLineNo">430</span><a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public TableDescriptorBuilder setRegionMemStoreReplication(boolean memstoreReplication) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    desc.setRegionMemStoreReplication(memstoreReplication);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    return this;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>  }<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>  public TableDescriptorBuilder setRegionReplication(int regionReplication) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    desc.setRegionReplication(regionReplication);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    return this;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  }<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>  public TableDescriptorBuilder setRegionSplitPolicyClassName(String clazz) {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    desc.setRegionSplitPolicyClassName(clazz);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    return this;<a name="line.443"></a>
+<span class="sourceLineNo">444</span>  }<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span>  public TableDescriptorBuilder setValue(final String key, final String value) {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    desc.setValue(key, value);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    return this;<a name="line.448"></a>
+<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
+<span class="sourceLineNo">450</span><a name="line.450"></a>
+<span class="sourceLineNo">451</span>  public TableDescriptorBuilder setValue(final Bytes key, final Bytes value) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    desc.setValue(key, value);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    return this;<a name="line.453"></a>
+<span class="sourceLineNo">454</span>  }<a name="line.454"></a>
+<span class="sourceLineNo">455</span><a name="line.455"></a>
+<span class="sourceLineNo">456</span>  public TableDescriptorBuilder setValue(final byte[] key, final byte[] value) {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    desc.setValue(key, value);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    return this;<a name="line.458"></a>
+<span class="sourceLineNo">459</span>  }<a name="line.459"></a>
+<span class="sourceLineNo">460</span><a name="line.460"></a>
+<span class="sourceLineNo">461</span>  /**<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * Sets replication scope all &amp; only the columns already in the builder. Columns added later won't<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * be backfilled with replication scope.<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   * @param scope replication scope<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * @return a TableDescriptorBuilder<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   */<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  public TableDescriptorBuilder setReplicationScope(int scope) {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    Map&lt;byte[], ColumnFamilyDescriptor&gt; newFamilies = new TreeMap&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    newFamilies.putAll(desc.families);<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    newFamilies<a name="line.470"></a>
+<span class="sourceLineNo">471</span>        .forEach((cf, cfDesc) -&gt; {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>          desc.removeColumnFamily(cf);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>          desc.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(cfDesc).setScope(scope)<a name="line.473"></a>
+<span class="sourceLineNo">474</span>              .build());<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        });<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    return this;<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>  public TableDescriptor build() {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    return new ModifyableTableDescriptor(desc);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>  }<a name="line.481"></a>
+<span class="sourceLineNo">482</span><a name="line.482"></a>
+<span class="sourceLineNo">483</span>  /**<a name="line.483"></a>
+<span class="sourceLineNo">484</span>   * TODO: make this private after removing the HTableDescriptor<a name="line.484"></a>
+<span class="sourceLineNo">485</span>   */<a name="line.485"></a>
+<span class="sourceLineNo">486</span>  @InterfaceAudience.Private<a name="line.486"></a>
+<span class="sourceLineNo">487</span>  public static class ModifyableTableDescriptor<a name="line.487"></a>
+<span class="sourceLineNo">488</span>          implements TableDescriptor, Comparable&lt;ModifyableTableDescriptor&gt; {<a name="line.488"></a>
+<span class="sourceLineNo">489</span><a name="line.489"></a>
+<span class="sourceLineNo">490</span>    private final TableName name;<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span>    /**<a name="line.492"></a>
+<span class="sourceLineNo">493</span>     * A map which holds the metadata information of the table. This metadata<a name="line.493"></a>
+<span class="sourceLineNo">494</span>     * includes values like IS_META, SPLIT_POLICY, MAX_FILE_SIZE,<a name="line.494"></a>
+<span class="sourceLineNo">495</span>     * READONLY, MEMSTORE_FLUSHSIZE etc...<a name="line.495"></a>
+<span class="sourceLineNo">496</span>     */<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    private final Map&lt;Bytes, Bytes&gt; values = new HashMap&lt;&gt;();<a name="line.497"></a>
 <span class="sourceLineNo">498</span><a name="line.498"></a>
 <span class="sourceLineNo">499</span>    /**<a name="line.499"></a>
-<span class="sourceLineNo">500</span>     * Construct a table descriptor by cloning the descriptor passed as a<a name="line.500"></a>
-<span class="sourceLineNo">501</span>     * parameter.<a name="line.501"></a>
-<span class="sourceLineNo">502</span>     * &lt;p&gt;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>     * Makes a deep copy of the supplied descriptor.<a name="line.503"></a>
-<span class="sourceLineNo">504</span>     * @param name The new name<a name="line.504"></a>
-<span class="sourceLineNo">505</span>     * @param desc The descriptor.<a name="line.505"></a>
-<span class="sourceLineNo">506</span>     * TODO: make this private after removing the HTableDescriptor<a name="line.506"></a>
-<span class="sourceLineNo">507</span>     */<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    @InterfaceAudience.Private<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    @Deprecated // only used by HTableDescriptor. remove this method if HTD is removed<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    public ModifyableTableDescriptor(final TableName name, final TableDescriptor desc) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      this(name, Arrays.asList(desc.getColumnFamilies()), desc.getValues());<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>    private ModifyableTableDescriptor(final TableName name, final Collection&lt;ColumnFamilyDescriptor&gt; families,<a name="line.514"></a>
-<span class="sourceLineNo">515</span>            Map&lt;Bytes, Bytes&gt; values) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      this.name = name;<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      families.forEach(c -&gt; this.families.put(c.getName(), ColumnFamilyDescriptorBuilder.copy(c)));<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      this.values.putAll(values);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      this.values.put(IS_META_KEY,<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        new Bytes(Bytes.toBytes(Boolean.toString(name.equals(TableName.META_TABLE_NAME)))));<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    }<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    /**<a name="line.523"></a>
-<span class="sourceLineNo">524</span>     * Checks if this table is &lt;code&gt; hbase:meta &lt;/code&gt; region.<a name="line.524"></a>
-<span class="sourceLineNo">525</span>     *<a name="line.525"></a>
-<span class="sourceLineNo">526</span>     * @return true if this table is &lt;code&gt; hbase:meta &lt;/code&gt; region<a name="line.526"></a>
-<span class="sourceLineNo">527</span>     */<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    @Override<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    public boolean isMetaRegion() {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      return getOrDefault(IS_META_KEY, Boolean::valueOf, false);<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>    /**<a name="line.533"></a>
-<span class="sourceLineNo">534</span>     * Checks if the table is a &lt;code&gt;hbase:meta&lt;/code&gt; table<a name="line.534"></a>
-<span class="sourceLineNo">535</span>     *<a name="line.535"></a>
-<span class="sourceLineNo">536</span>     * @return true if table is &lt;code&gt; hbase:meta &lt;/code&gt; region.<a name="line.536"></a>
-<span class="sourceLineNo">537</span>     */<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    @Override<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    public boolean isMetaTable() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return isMetaRegion();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>    @Override<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    public Bytes getValue(Bytes key) {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      Bytes rval = values.get(key);<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      return rval == null ? null : new Bytes(rval.copyBytes());<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
+<span class="sourceLineNo">500</span>     * Maps column family name to the respective FamilyDescriptors<a name="line.500"></a>
+<span class="sourceLineNo">501</span>     */<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    private final Map&lt;byte[], ColumnFamilyDescriptor&gt; families<a name="line.502"></a>
+<span class="sourceLineNo">503</span>            = new TreeMap&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.503"></a>
+<span class="sourceLineNo">504</span><a name="line.504"></a>
+<span class="sourceLineNo">505</span>    /**<a name="line.505"></a>
+<span class="sourceLineNo">506</span>     * Construct a table descriptor specifying a TableName object<a name="line.506"></a>
+<span class="sourceLineNo">507</span>     *<a name="line.507"></a>
+<span class="sourceLineNo">508</span>     * @param name Table name.<a name="line.508"></a>
+<span class="sourceLineNo">509</span>     * TODO: make this private after removing the HTableDescriptor<a name="line.509"></a>
+<span class="sourceLineNo">510</span>     */<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    @InterfaceAudience.Private<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    public ModifyableTableDescriptor(final TableName name) {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>      this(name, Collections.EMPTY_LIST, Collections.EMPTY_MAP);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    }<a name="line.514"></a>
+<span class="sourceLineNo">515</span><a name="line.515"></a>
+<span class="sourceLineNo">516</span>    private ModifyableTableDescriptor(final TableDescriptor desc) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>      this(desc.getTableName(), Arrays.asList(desc.getColumnFamilies()), desc.getValues());<a name="line.517"></a>
+<span class="sourceLineNo">518</span>    }<a name="line.518"></a>
+<span class="sourceLineNo">519</span><a name="line.519"></a>
+<span class="sourceLineNo">520</span>    /**<a name="line.520"></a>
+<span class="sourceLineNo">521</span>     * Construct a table descriptor by cloning the descriptor passed as a<a name="line.521"></a>
+<span class="sourceLineNo">522</span>     * parameter.<a name="line.522"></a>
+<span class="sourceLineNo">523</span>     * &lt;p&gt;<a name="line.523"></a>
+<span class="sourceLineNo">524</span>     * Makes a deep copy of the supplied descriptor.<a name="line.524"></a>
+<span class="sourceLineNo">525</span>     * @param name The new name<a name="line.525"></a>
+<span class="sourceLineNo">526</span>     * @param desc The descriptor.<a name="line.526"></a>
+<span class="sourceLineNo">527</span>     * TODO: make this private after removing the HTableDescriptor<a name="line.527"></a>
+<span class="sourceLineNo">528</span>     */<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    @InterfaceAudience.Private<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    @Deprecated // only used by HTableDescriptor. remove this method if HTD is removed<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    public ModifyableTableDescriptor(final TableName name, final TableDescriptor desc) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      this(name, Arrays.asList(desc.getColumnFamilies()), desc.getValues());<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>    private ModifyableTableDescriptor(final TableName name, final Collection&lt;ColumnFamilyDescriptor&gt; families,<a name="line.535"></a>
+<span class="sourceLineNo">536</span>            Map&lt;Bytes, Bytes&gt; values) {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      this.name = name;<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      families.forEach(c -&gt; this.families.put(c.getName(), ColumnFamilyDescriptorBuilder.copy(c)));<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      this.values.putAll(values);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>      this.values.put(IS_META_KEY,<a name="line.540"></a>
+<span class="sourceLineNo">541</span>        new Bytes(Bytes.toBytes(Boolean.toString(name.equals(TableName.META_TABLE_NAME)))));<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    }<a name="line.542"></a>
+<span class="sourceLineNo">543</span><a name="line.543"></a>
+<span class="sourceLineNo">544</span>    /**<a name="line.544"></a>
+<span class="sourceLineNo">545</span>     * Checks if this table is &lt;code&gt; hbase:meta &lt;/code&gt; region.<a name="line.545"></a>
+<span class="sourceLineNo">546</span>     *<a name="line.546"></a>
+<span class="sourceLineNo">547</span>     * @return true if this table is &lt;code&gt; hbase:meta &lt;/code&gt; region<a name="line.547"></a>
+<span class="sourceLineNo">548</span>     */<a name="line.548"></a>
 <span class="sourceLineNo">549</span>    @Override<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    public String getValue(String key) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      Bytes rval = values.get(new Bytes(Bytes.toBytes(key)));<a name="line.551"></a>
-<span class="sourceLineNo">552</span>      return rval == null ? null : Bytes.toString(rval.get(), rval.getOffset(), rval.getLength());<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
-<span class="sourceLineNo">554</span><a name="line.554"></a>
-<span class="sourceLineNo">555</span>    @Override<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    public byte[] getValue(byte[] key) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      Bytes value = values.get(new Bytes(key));<a name="line.557"></a>
-<span class="sourceLineNo">558</span>      return value == null ? null : value.copyBytes();<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    }<a name="line.559"></a>
-<span class="sourceLineNo">560</span><a name="line.560"></a>
-<span class="sourceLineNo">561</span>    private &lt;T&gt; T getOrDefault(Bytes key, Function&lt;String, T&gt; function, T defaultValue) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      Bytes value = values.get(key);<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      if (value == null) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>        return defaultValue;<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      } else {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>        return function.apply(Bytes.toString(value.get(), value.getOffset(), value.getLength()));<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      }<a name="line.567"></a>
+<span class="sourceLineNo">550</span>    public boolean isMetaRegion() {<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      return getOrDefault(IS_META_KEY, Boolean::valueOf, false);<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    }<a name="line.552"></a>
+<span class="sourceLineNo">553</span><a name="line.553"></a>
+<span class="sourceLineNo">554</span>    /**<a name="line.554"></a>
+<span class="sourceLineNo">555</span>     * Checks if the table is a &lt;code&gt;hbase:meta&lt;/code&gt; table<a name="line.555"></a>
+<span class="sourceLineNo">556</span>     *<a name="line.556"></a>
+<span class="sourceLineNo">557</span>     * @return true if table is &lt;code&gt; hbase:meta &lt;/code&gt; region.<a name="line.557"></a>
+<span class="sourceLineNo">558</span>     */<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    @Override<a name="line.559"></a>
+<span class="sourceLineNo">560</span>    public boolean isMetaTable() {<a name="line.560"></a>
+<span class="sourceLineNo">561</span>      return isMetaRegion();<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    }<a name="line.562"></a>
+<span class="sourceLineNo">563</span><a name="line.563"></a>
+<span class="sourceLineNo">564</span>    @Override<a name="line.564"></a>
+<span class="sourceLineNo">565</span>    public Bytes getValue(Bytes key) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      Bytes rval = values.get(key);<a name="line.566"></a>
+<span class="sourceLineNo">567</span>      return rval == null ? null : new Bytes(rval.copyBytes());<a name="line.567"></a>
 <span class="sourceLineNo">568</span>    }<a name="line.568"></a>
 <span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>    /**<a name="line.570"></a>
-<span class="sourceLineNo">571</span>     * Getter for fetching an unmodifiable {@link #values} map.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>     *<a name="line.572"></a>
-<span class="sourceLineNo">573</span>     * @return unmodifiable map {@link #values}.<a name="line.573"></a>
-<span class="sourceLineNo">574</span>     * @see #values<a name="line.574"></a>
-<span class="sourceLineNo">575</span>     */<a name="line.575"></a>
+<span class="sourceLineNo">570</span>    @Override<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    public String getValue(String key) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      Bytes rval = values.get(new Bytes(Bytes.toBytes(key)));<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      return rval == null ? null : Bytes.toString(rval.get(), rval.getOffset(), rval.getLength());<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>    @Override<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    public Map&lt;Bytes, Bytes&gt; getValues() {<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      // shallow pointer copy<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      return Collections.unmodifiableMap(values);<a name="line.579"></a>
+<span class="sourceLineNo">577</span>    public byte[] getValue(byte[] key) {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>      Bytes value = values.get(new Bytes(key));<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      return value == null ? null : value.copyBytes();<a name="line.579"></a>
 <span class="sourceLineNo">580</span>    }<a name="line.580"></a>
 <span class="sourceLineNo">581</span><a name="line.581"></a>
-<span class="sourceLineNo">582</span>    /**<a name="line.582"></a>
-<span class="sourceLineNo">583</span>     * Setter for storing metadata as a (key, value) pair in {@link #values} map<a name="line.583"></a>
-<span class="sourceLineNo">584</span>     *<a name="line.584"></a>
-<span class="sourceLineNo">585</span>     * @param key The key.<a name="line.585"></a>
-<span class="sourceLineNo">586</span>     * @param value The value. If null, removes the setting.<a name="line.586"></a>
-<span class="sourceLineNo">587</span>     * @return the modifyable TD<a name="line.587"></a>
-<span class="sourceLineNo">588</span>     * @see #values<a name="line.588"></a>
-<span class="sourceLineNo">589</span>     */<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    public ModifyableTableDescriptor setValue(byte[] key, byte[] value) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>      return setValue(toBytesOrNull(key, v -&gt; v),<a name="line.591"></a>
-<span class="sourceLineNo">592</span>              toBytesOrNull(value, v -&gt; v));<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>    public ModifyableTableDescriptor setValue(String key, String value) {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>      return setValue(toBytesOrNull(key, Bytes::toBytes),<a name="line.596"></a>
-<span class="sourceLineNo">597</span>              toBytesOrNull(value, Bytes::toBytes));<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    }<a name="line.598"></a>
-<span class="sourceLineNo">599</span><a name="line.599"></a>
-<span class="sourceLineNo">600</span>    /*<a name="line.600"></a>
-<span class="sourceLineNo">601</span>     * @param key The key.<a name="line.601"></a>
-<span class="sourceLineNo">602</span>     * @param value The value. If null, removes the setting.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>     */<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    private ModifyableTableDescriptor setValue(final Bytes key,<a name="line.604"></a>
-<span class="sourceLineNo">605</span>            final String value) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      return setValue(key, toBytesOrNull(value, Bytes::toBytes));<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    }<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>     * Setter for storing metadata as a (key, value) pair in {@link #values} map<a name="line.610"></a>
-<span class="sourceLineNo">611</span>     *<a name="line.611"></a>
-<span class="sourceLineNo">612</span>     * @param key The key.<a name="line.612"></a>
-<span class="sourceLineNo">613</span>     * @param value The value. If null, removes the setting.<a name="line.613"></a>
-<span class="sourceLineNo">614</span>     */<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    public ModifyableTableDescriptor setValue(final Bytes key, final Bytes value) {<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      if (value == null) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        values.remove(key);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      } else {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>        values.put(key, value);<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      }<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      return this;<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    }<a name="line.622"></a>
-<span class="sourceLineNo">623</span><a name="line.623"></a>
-<span class="sourceLineNo">624</span>    private static &lt;T&gt; Bytes toBytesOrNull(T t, Function&lt;T, byte[]&gt; f) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      if (t == null) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        return null;<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      } else {<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        return new Bytes(f.apply(t));<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      }<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    }<a name="line.630"></a>
-<span class="sourceLineNo">631</span><a name="line.631"></a>
-<span class="sourceLineNo">632</span>    /**<a name="line.632"></a>
-<span class="sourceLineNo">633</span>     * Remove metadata represented by the key from the {@link #values} map<a name="line.633"></a>
-<span class="sourceLineNo">634</span>     *<a name="line.634"></a>
-<span class="sourceLineNo">635</span>     * @param key Key whose key and value we're to remove from TableDescriptor<a name="line.635"></a>
-<span class="sourceLineNo">636</span>     * parameters.<a name="line.636"></a>
-<span class="sourceLineNo">637</span>     * @return the modifyable TD<a name="line.637"></a>
-<span class="sourceLineNo">638</span>     */<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    public ModifyableTableDescriptor removeValue(Bytes key) {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      return setValue(key, (Bytes) null);<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">643</span>    /**<a name="line.643"></a>
-<span class="sourceLineNo">644</span>     * Remove metadata represented by the key from the {@link #values} map<a name="line.644"></a>
-<span class="sourceLineNo">645</span>     *<a name="line.645"></a>
-<span class="sourceLineNo">646</span>     * @param key Key whose key and value we're to remove from TableDescriptor<a name="line.646"></a>
-<span class="sourceLineNo">647</span>     * parameters.<a name="line.647"></a>
-<span class="sourceLineNo">648</span>     * @return the modifyable TD<a name="line.648"></a>
-<span class="sourceLineNo">649</span>     */<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    public ModifyableTableDescriptor removeValue(final byte[] key) {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      return removeValue(new Bytes(key));<a name="line.651"></a>
-<span class="sourceLineNo">652</span>    }<a name="line.652"></a>
-<span class="sourceLineNo">653</span><a name="line.653"></a>
-<span class="sourceLineNo">654</span>    /**<a name="line.654"></a>
-<span class="sourceLineNo">655</span>     * Check if the readOnly flag of the table is set. If the readOnly flag is<a name="line.655"></a>
-<span class="sourceLineNo">656</span>     * set then the contents of the table can only be read from but not<a name="line.656"></a>
-<span class="sourceLineNo">657</span>     * modified.<a name="line.657"></a>
-<span class="sourceLineNo">658</span>     *<a name="line.658"></a>
-<span class="sourceLineNo">659</span>     * @return true if all columns in the table should be read only<a name="line.659"></a>
-<span class="sourceLineNo">660</span>     */<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    @Override<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    public boolean isReadOnly() {<a name="line.662"></a>
-<span class="sourceLineNo">663</span>      return getOrDefault(READONLY_KEY, Boolean::valueOf, DEFAULT_READONLY);<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    }<a name="line.664"></a>
-<span class="sourceLineNo">665</span><a name="line.665"></a>
-<span class="sourceLineNo">666</span>    /**<a name="line.666"></a>
-<span class="sourceLineNo">667</span>     * Setting the table as read only sets all the columns in the table as read<a name="line.667"></a>
-<span class="sourceLineNo">668</span>     * only. By default all tables are modifiable, but if the readOnly flag is<a name="line.668"></a>
-<span class="sourceLineNo">669</span>     * set to true then the contents of the table can only be read but not<a name="line.669"></a>
-<span class="sourceLineNo">670</span>     * modified.<a name="line.670"></a>
-<span class="sourceLineNo">671</span>     *<a name="line.671"></a>
-<span class="sourceLineNo">672</span>     * @param readOnly True if all of the 

<TRUNCATED>

[30/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/apidocs/org/apache/hadoop/hbase/class-use/HTableDescriptor.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/class-use/HTableDescriptor.html b/apidocs/org/apache/hadoop/hbase/class-use/HTableDescriptor.html
index 982d1d9..7536438 100644
--- a/apidocs/org/apache/hadoop/hbase/class-use/HTableDescriptor.html
+++ b/apidocs/org/apache/hadoop/hbase/class-use/HTableDescriptor.html
@@ -227,6 +227,18 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
+<td class="colLast"><span class="typeNameLabel">HTableDescriptor.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setNormalizerTargetRegionCount-int-">setNormalizerTargetRegionCount</a></span>(int&nbsp;regionCount)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
+<td class="colLast"><span class="typeNameLabel">HTableDescriptor.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setNormalizerTargetRegionSize-long-">setNormalizerTargetRegionSize</a></span>(long&nbsp;regionSize)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><span class="typeNameLabel">HTableDescriptor.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setOwner-org.apache.hadoop.hbase.security.User-">setOwner</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;owner)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html b/apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html
index a8f76a1..d99bc2d 100644
--- a/apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html
+++ b/apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":17,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":38,"i11":6,"i12":6,"i13":6,"i14":6,"i15":6,"i16":6,"i17":6,"i18":6,"i19":6,"i20":6,"i21":18,"i22":6,"i23":6,"i24":6,"i25":6,"i26":6,"i27":6,"i28":18};
+var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":17,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":38,"i13":6,"i14":6,"i15":6,"i16":6,"i17":6,"i18":6,"i19":6,"i20":6,"i21":6,"i22":6,"i23":18,"i24":6,"i25":6,"i26":6,"i27":6,"i28":6,"i29":6,"i30":18};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],16:["t5","Default Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -193,109 +193,121 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 </td>
 </tr>
 <tr id="i10" class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getNormalizerTargetRegionCount--">getNormalizerTargetRegionCount</a></span>()</code>
+<div class="block">Check if there is the target region count.</div>
+</td>
+</tr>
+<tr id="i11" class="rowColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getNormalizerTargetRegionSize--">getNormalizerTargetRegionSize</a></span>()</code>
+<div class="block">Check if there is the target region size.</div>
+</td>
+</tr>
+<tr id="i12" class="altColor">
 <td class="colFirst"><code><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 class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getOwnerString--">getOwnerString</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getPriority--">getPriority</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getRegionReplication--">getRegionReplication</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code><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 class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getRegionSplitPolicyClassName--">getRegionSplitPolicyClassName</a></span>()</code>
 <div class="block">This gets the class associated with the region split policy which
  determines when a region split should occur.</div>
 </td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getTableName--">getTableName</a></span>()</code>
 <div class="block">Get the name of the table</div>
 </td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getValue-byte:A-">getValue</a></span>(byte[]&nbsp;key)</code>
 <div class="block">Getter for accessing the metadata associated with the key.</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getValue-org.apache.hadoop.hbase.util.Bytes-">getValue</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key)</code>
 <div class="block">Getter for accessing the metadata associated with the key.</div>
 </td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code><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 class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getValue-java.lang.String-">getValue</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</code>
 <div class="block">Getter for accessing the metadata associated with the key.</div>
 </td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>,<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getValues--">getValues</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#hasColumnFamily-byte:A-">hasColumnFamily</a></span>(byte[]&nbsp;name)</code>
 <div class="block">Checks to see if this table contains the given column family</div>
 </td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#hasCoprocessor-java.lang.String-">hasCoprocessor</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;classNameToMatch)</code>
 <div class="block">Check if the table has an attached co-processor represented by the name
  className</div>
 </td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code>default boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#hasGlobalReplicationScope--">hasGlobalReplicationScope</a></span>()</code>
 <div class="block">Check if any of the table's cfs' replication scope are set to
  <a href="../../../../../org/apache/hadoop/hbase/HConstants.html#REPLICATION_SCOPE_GLOBAL"><code>HConstants.REPLICATION_SCOPE_GLOBAL</code></a>.</div>
 </td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#hasRegionMemStoreReplication--">hasRegionMemStoreReplication</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#isCompactionEnabled--">isCompactionEnabled</a></span>()</code>
 <div class="block">Check if the compaction enable flag of the table is true.</div>
 </td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#isMetaRegion--">isMetaRegion</a></span>()</code>
 <div class="block">Checks if this table is <code> hbase:meta </code> region.</div>
 </td>
 </tr>
-<tr id="i25" class="rowColor">
+<tr id="i27" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#isMetaTable--">isMetaTable</a></span>()</code>
 <div class="block">Checks if the table is a <code>hbase:meta</code> table</div>
 </td>
 </tr>
-<tr id="i26" class="altColor">
+<tr id="i28" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#isNormalizationEnabled--">isNormalizationEnabled</a></span>()</code>
 <div class="block">Check if normalization enable flag of the table is true.</div>
 </td>
 </tr>
-<tr id="i27" class="rowColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#isReadOnly--">isReadOnly</a></span>()</code>
 <div class="block">Check if the readOnly flag of the table is set.</div>
 </td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code>default boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#matchReplicationScope-boolean-">matchReplicationScope</a></span>(boolean&nbsp;enabled)</code>
 <div class="block">Check if the table's cfs' replication scope matched with the replication state</div>
@@ -695,13 +707,43 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 </dl>
 </li>
 </ul>
+<a name="getNormalizerTargetRegionCount--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getNormalizerTargetRegionCount</h4>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptor.html#line.269">getNormalizerTargetRegionCount</a>()</pre>
+<div class="block">Check if there is the target region count. If so, the normalize plan will
+ be calculated based on the target region count.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>target region count after normalize done</dd>
+</dl>
+</li>
+</ul>
+<a name="getNormalizerTargetRegionSize--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getNormalizerTargetRegionSize</h4>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptor.html#line.277">getNormalizerTargetRegionSize</a>()</pre>
+<div class="block">Check if there is the target region size. If so, the normalize plan will
+ be calculated based on the target region size.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>target region size after normalize done</dd>
+</dl>
+</li>
+</ul>
 <a name="isReadOnly--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>isReadOnly</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptor.html#line.269">isReadOnly</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptor.html#line.285">isReadOnly</a>()</pre>
 <div class="block">Check if the readOnly flag of the table is set. If the readOnly flag is set
  then the contents of the table can only be read from but not modified.</div>
 <dl>
@@ -716,7 +758,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <ul class="blockList">
 <li class="blockList">
 <h4>hasGlobalReplicationScope</h4>
-<pre>default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptor.html#line.276">hasGlobalReplicationScope</a>()</pre>
+<pre>default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptor.html#line.292">hasGlobalReplicationScope</a>()</pre>
 <div class="block">Check if any of the table's cfs' replication scope are set to
  <a href="../../../../../org/apache/hadoop/hbase/HConstants.html#REPLICATION_SCOPE_GLOBAL"><code>HConstants.REPLICATION_SCOPE_GLOBAL</code></a>.</div>
 <dl>
@@ -731,7 +773,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <ul class="blockListLast">
 <li class="blockList">
 <h4>matchReplicationScope</h4>
-<pre>default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptor.html#line.286">matchReplicationScope</a>(boolean&nbsp;enabled)</pre>
+<pre>default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptor.html#line.302">matchReplicationScope</a>(boolean&nbsp;enabled)</pre>
 <div class="block">Check if the table's cfs' replication scope matched with the replication state</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/apidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html b/apidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
index 5456d0b..cdb6c5a 100644
--- a/apidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
+++ b/apidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":9,"i2":9,"i3":10,"i4":9,"i5":9,"i6":9,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":42,"i23":42,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":9};
+var methods = {"i0":10,"i1":9,"i2":9,"i3":10,"i4":9,"i5":9,"i6":9,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":42,"i25":42,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":9};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -287,58 +287,66 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr id="i22" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setNormalizerTargetRegionCount-int-">setNormalizerTargetRegionCount</a></span>(int&nbsp;regionCount)</code>&nbsp;</td>
+</tr>
+<tr id="i23" class="rowColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setNormalizerTargetRegionSize-long-">setNormalizerTargetRegionSize</a></span>(long&nbsp;regionSize)</code>&nbsp;</td>
+</tr>
+<tr id="i24" class="altColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setOwner-org.apache.hadoop.hbase.security.User-">setOwner</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;owner)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setOwnerString-java.lang.String-">setOwnerString</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;ownerString)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setPriority-int-">setPriority</a></span>(int&nbsp;priority)</code>&nbsp;</td>
 </tr>
-<tr id="i25" class="rowColor">
+<tr id="i27" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setReadOnly-boolean-">setReadOnly</a></span>(boolean&nbsp;readOnly)</code>&nbsp;</td>
 </tr>
-<tr id="i26" class="altColor">
+<tr id="i28" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setRegionMemStoreReplication-boolean-">setRegionMemStoreReplication</a></span>(boolean&nbsp;memstoreReplication)</code>&nbsp;</td>
 </tr>
-<tr id="i27" class="rowColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setRegionReplication-int-">setRegionReplication</a></span>(int&nbsp;regionReplication)</code>&nbsp;</td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setRegionSplitPolicyClassName-java.lang.String-">setRegionSplitPolicyClassName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;clazz)</code>&nbsp;</td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setReplicationScope-int-">setReplicationScope</a></span>(int&nbsp;scope)</code>
 <div class="block">Sets replication scope all & only the columns already in the builder.</div>
 </td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setValue-byte:A-byte:A-">setValue</a></span>(byte[]&nbsp;key,
         byte[]&nbsp;value)</code>&nbsp;</td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setValue-org.apache.hadoop.hbase.util.Bytes-org.apache.hadoop.hbase.util.Bytes-">setValue</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key,
         <a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;value)</code>&nbsp;</td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setValue-java.lang.String-java.lang.String-">setValue</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key,
         <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;value)</code>&nbsp;</td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#toByteArray-org.apache.hadoop.hbase.client.TableDescriptor-">toByteArray</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</code>&nbsp;</td>
 </tr>
@@ -379,7 +387,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_READONLY</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.172">DEFAULT_READONLY</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.183">DEFAULT_READONLY</a></pre>
 <div class="block">Constant that denotes whether the table is READONLY by default and is false</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -393,7 +401,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_COMPACTION_ENABLED</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.177">DEFAULT_COMPACTION_ENABLED</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.188">DEFAULT_COMPACTION_ENABLED</a></pre>
 <div class="block">Constant that denotes whether the table is compaction enabled by default</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -407,7 +415,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_NORMALIZATION_ENABLED</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.182">DEFAULT_NORMALIZATION_ENABLED</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.193">DEFAULT_NORMALIZATION_ENABLED</a></pre>
 <div class="block">Constant that denotes whether the table is normalized by default.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -421,7 +429,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_MEMSTORE_FLUSH_SIZE</h4>
-<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.188">DEFAULT_MEMSTORE_FLUSH_SIZE</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.199">DEFAULT_MEMSTORE_FLUSH_SIZE</a></pre>
 <div class="block">Constant that denotes the maximum default size of the memstore in bytes after which
  the contents are flushed to the store files.</div>
 <dl>
@@ -436,7 +444,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGION_REPLICATION</h4>
-<pre>public static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.190">DEFAULT_REGION_REPLICATION</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.201">DEFAULT_REGION_REPLICATION</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.TableDescriptorBuilder.DEFAULT_REGION_REPLICATION">Constant Field Values</a></dd>
@@ -449,7 +457,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGION_MEMSTORE_REPLICATION</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.192">DEFAULT_REGION_MEMSTORE_REPLICATION</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.203">DEFAULT_REGION_MEMSTORE_REPLICATION</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.TableDescriptorBuilder.DEFAULT_REGION_MEMSTORE_REPLICATION">Constant Field Values</a></dd>
@@ -462,7 +470,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>NAMESPACE_TABLEDESC</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.243">NAMESPACE_TABLEDESC</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.254">NAMESPACE_TABLEDESC</a></pre>
 <div class="block">Table descriptor for namespace table</div>
 </li>
 </ul>
@@ -480,7 +488,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toByteArray</h4>
-<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.259">toByteArray</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
+<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.270">toByteArray</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>desc</code> - The table descriptor to serialize</dd>
@@ -495,7 +503,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>parseFrom</h4>
-<pre>public static&nbsp;<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/client/TableDescriptorBuilder.html#line.272">parseFrom</a>(byte[]&nbsp;pbBytes)
+<pre>public static&nbsp;<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/client/TableDescriptorBuilder.html#line.283">parseFrom</a>(byte[]&nbsp;pbBytes)
                                  throws org.apache.hadoop.hbase.exceptions.DeserializationException</pre>
 <div class="block">The input should be created by <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#toByteArray-org.apache.hadoop.hbase.client.TableDescriptor-"><code>toByteArray(org.apache.hadoop.hbase.client.TableDescriptor)</code></a>.</div>
 <dl>
@@ -514,7 +522,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>newBuilder</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.276">newBuilder</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.287">newBuilder</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name)</pre>
 </li>
 </ul>
 <a name="copy-org.apache.hadoop.hbase.client.TableDescriptor-">
@@ -523,7 +531,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copy</h4>
-<pre>public static&nbsp;<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/client/TableDescriptorBuilder.html#line.280">copy</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
+<pre>public static&nbsp;<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/client/TableDescriptorBuilder.html#line.291">copy</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
 </li>
 </ul>
 <a name="copy-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableDescriptor-">
@@ -532,7 +540,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copy</h4>
-<pre>public static&nbsp;<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/client/TableDescriptorBuilder.html#line.284">copy</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name,
+<pre>public static&nbsp;<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/client/TableDescriptorBuilder.html#line.295">copy</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name,
                                    <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
 </li>
 </ul>
@@ -542,7 +550,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>newBuilder</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.293">newBuilder</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.304">newBuilder</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
 <div class="block">Copy all values, families, and name from the input.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -558,7 +566,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setCoprocessor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.305">setCoprocessor</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;className)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.316">setCoprocessor</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;className)
                                       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>
@@ -572,7 +580,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setCoprocessor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.309">setCoprocessor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/CoprocessorDescriptor.html" title="interface in org.apache.hadoop.hbase.client">CoprocessorDescriptor</a>&nbsp;cpDesc)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.320">setCoprocessor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/CoprocessorDescriptor.html" title="interface in org.apache.hadoop.hbase.client">CoprocessorDescriptor</a>&nbsp;cpDesc)
                                       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>
@@ -586,7 +594,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setCoprocessors</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.314">setCoprocessors</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/client/CoprocessorDescriptor.html" title="interface in org.apache.hadoop.hbase.client">CoprocessorDescriptor</a>&gt;&nbsp;cpDescs)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.325">setCoprocessors</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/client/CoprocessorDescriptor.html" title="interface in org.apache.hadoop.hbase.client">CoprocessorDescriptor</a>&gt;&nbsp;cpDescs)
                                        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>
@@ -600,7 +608,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setColumnFamily</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.322">setColumnFamily</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;family)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.333">setColumnFamily</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;family)</pre>
 </li>
 </ul>
 <a name="setColumnFamilies-java.util.Collection-">
@@ -609,7 +617,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setColumnFamilies</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.327">setColumnFamilies</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/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&gt;&nbsp;families)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.338">setColumnFamilies</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/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&gt;&nbsp;families)</pre>
 </li>
 </ul>
 <a name="modifyColumnFamily-org.apache.hadoop.hbase.client.ColumnFamilyDescriptor-">
@@ -618,7 +626,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>modifyColumnFamily</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.333">modifyColumnFamily</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;family)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.344">modifyColumnFamily</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;family)</pre>
 </li>
 </ul>
 <a name="removeValue-org.apache.hadoop.hbase.util.Bytes-">
@@ -627,7 +635,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>removeValue</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.338">removeValue</a>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.349">removeValue</a>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key)</pre>
 </li>
 </ul>
 <a name="removeValue-byte:A-">
@@ -636,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>removeValue</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.343">removeValue</a>(byte[]&nbsp;key)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.354">removeValue</a>(byte[]&nbsp;key)</pre>
 </li>
 </ul>
 <a name="removeColumnFamily-byte:A-">
@@ -645,7 +653,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>removeColumnFamily</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.348">removeColumnFamily</a>(byte[]&nbsp;name)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.359">removeColumnFamily</a>(byte[]&nbsp;name)</pre>
 </li>
 </ul>
 <a name="removeCoprocessor-java.lang.String-">
@@ -654,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>removeCoprocessor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.353">removeCoprocessor</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;className)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.364">removeCoprocessor</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;className)</pre>
 </li>
 </ul>
 <a name="setCompactionEnabled-boolean-">
@@ -663,7 +671,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setCompactionEnabled</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.358">setCompactionEnabled</a>(boolean&nbsp;isEnable)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.369">setCompactionEnabled</a>(boolean&nbsp;isEnable)</pre>
 </li>
 </ul>
 <a name="setDurability-org.apache.hadoop.hbase.client.Durability-">
@@ -672,7 +680,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setDurability</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.363">setDurability</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.374">setDurability</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability)</pre>
 </li>
 </ul>
 <a name="setFlushPolicyClassName-java.lang.String-">
@@ -681,7 +689,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setFlushPolicyClassName</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.368">setFlushPolicyClassName</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;clazz)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.379">setFlushPolicyClassName</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;clazz)</pre>
 </li>
 </ul>
 <a name="setMaxFileSize-long-">
@@ -690,7 +698,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setMaxFileSize</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.373">setMaxFileSize</a>(long&nbsp;maxFileSize)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.384">setMaxFileSize</a>(long&nbsp;maxFileSize)</pre>
 </li>
 </ul>
 <a name="setMemStoreFlushSize-long-">
@@ -699,7 +707,25 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setMemStoreFlushSize</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.378">setMemStoreFlushSize</a>(long&nbsp;memstoreFlushSize)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.389">setMemStoreFlushSize</a>(long&nbsp;memstoreFlushSize)</pre>
+</li>
+</ul>
+<a name="setNormalizerTargetRegionCount-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setNormalizerTargetRegionCount</h4>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.394">setNormalizerTargetRegionCount</a>(int&nbsp;regionCount)</pre>
+</li>
+</ul>
+<a name="setNormalizerTargetRegionSize-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setNormalizerTargetRegionSize</h4>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.399">setNormalizerTargetRegionSize</a>(long&nbsp;regionSize)</pre>
 </li>
 </ul>
 <a name="setNormalizationEnabled-boolean-">
@@ -708,7 +734,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setNormalizationEnabled</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.383">setNormalizationEnabled</a>(boolean&nbsp;isEnable)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.404">setNormalizationEnabled</a>(boolean&nbsp;isEnable)</pre>
 </li>
 </ul>
 <a name="setOwner-org.apache.hadoop.hbase.security.User-">
@@ -718,7 +744,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <li class="blockList">
 <h4>setOwner</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.389">setOwner</a>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;owner)</pre>
+public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.410">setOwner</a>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;owner)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </li>
 </ul>
@@ -729,7 +755,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <li class="blockList">
 <h4>setOwnerString</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.395">setOwnerString</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;ownerString)</pre>
+public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.416">setOwnerString</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;ownerString)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </li>
 </ul>
@@ -739,7 +765,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockList">
 <li class="blockList">
 <h4>setPriority</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.400">setPriority</a>(int&nbsp;priority)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.421">setPriority</a>(int&nbsp;priority)</pre>
 </li>
 </ul>
 <a name="setReadOnly-boolean-">
@@ -748,7 +774,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockList">
 <li class="blockList">
 <h4>setReadOnly</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.405">setReadOnly</a>(boolean&nbsp;readOnly)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.426">setReadOnly</a>(boolean&nbsp;readOnly)</pre>
 </li>
 </ul>
 <a name="setRegionMemStoreReplication-boolean-">
@@ -757,7 +783,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockList">
 <li class="blockList">
 <h4>setRegionMemStoreReplication</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.410">setRegionMemStoreReplication</a>(boolean&nbsp;memstoreReplication)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.431">setRegionMemStoreReplication</a>(boolean&nbsp;memstoreReplication)</pre>
 </li>
 </ul>
 <a name="setRegionReplication-int-">
@@ -766,7 +792,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockList">
 <li class="blockList">
 <h4>setRegionReplication</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.415">setRegionReplication</a>(int&nbsp;regionReplication)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.436">setRegionReplication</a>(int&nbsp;regionReplication)</pre>
 </li>
 </ul>
 <a name="setRegionSplitPolicyClassName-java.lang.String-">
@@ -775,7 +801,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockList">
 <li class="blockList">
 <h4>setRegionSplitPolicyClassName</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.420">setRegionSplitPolicyClassName</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;clazz)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.441">setRegionSplitPolicyClassName</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;clazz)</pre>
 </li>
 </ul>
 <a name="setValue-java.lang.String-java.lang.String-">
@@ -784,7 +810,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockList">
 <li class="blockList">
 <h4>setValue</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.425">setValue</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;key,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.446">setValue</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;key,
                                        <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;value)</pre>
 </li>
 </ul>
@@ -794,7 +820,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockList">
 <li class="blockList">
 <h4>setValue</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.430">setValue</a>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.451">setValue</a>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key,
                                        <a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;value)</pre>
 </li>
 </ul>
@@ -804,7 +830,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockList">
 <li class="blockList">
 <h4>setValue</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.435">setValue</a>(byte[]&nbsp;key,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.456">setValue</a>(byte[]&nbsp;key,
                                        byte[]&nbsp;value)</pre>
 </li>
 </ul>
@@ -814,7 +840,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockList">
 <li class="blockList">
 <h4>setReplicationScope</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.446">setReplicationScope</a>(int&nbsp;scope)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.467">setReplicationScope</a>(int&nbsp;scope)</pre>
 <div class="block">Sets replication scope all & only the columns already in the builder. Columns added later won't
  be backfilled with replication scope.</div>
 <dl>
@@ -831,7 +857,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockListLast">
 <li class="blockList">
 <h4>build</h4>
-<pre>public&nbsp;<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/client/TableDescriptorBuilder.html#line.458">build</a>()</pre>
+<pre>public&nbsp;<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/client/TableDescriptorBuilder.html#line.479">build</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/apidocs/org/apache/hadoop/hbase/client/class-use/TableDescriptorBuilder.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/class-use/TableDescriptorBuilder.html b/apidocs/org/apache/hadoop/hbase/client/class-use/TableDescriptorBuilder.html
index 94b5d3d..33da223 100644
--- a/apidocs/org/apache/hadoop/hbase/client/class-use/TableDescriptorBuilder.html
+++ b/apidocs/org/apache/hadoop/hbase/client/class-use/TableDescriptorBuilder.html
@@ -180,6 +180,14 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TableDescriptorBuilder.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setNormalizerTargetRegionCount-int-">setNormalizerTargetRegionCount</a></span>(int&nbsp;regionCount)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TableDescriptorBuilder.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setNormalizerTargetRegionSize-long-">setNormalizerTargetRegionSize</a></span>(long&nbsp;regionSize)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TableDescriptorBuilder.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setOwner-org.apache.hadoop.hbase.security.User-">setOwner</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;owner)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>


[26/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index cedf563..038098d 100644
--- a/book.html
+++ b/book.html
@@ -41148,7 +41148,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-08-12 14:29:58 UTC
+Last updated 2018-08-13 14:29:57 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index 09a4648..efe87ca 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -306,7 +306,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-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/apidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptor.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptor.html b/apidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptor.html
index 4589cc3..da2617c 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptor.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptor.html
@@ -269,49 +269,65 @@
 <span class="sourceLineNo">261</span>  boolean isNormalizationEnabled();<a name="line.261"></a>
 <span class="sourceLineNo">262</span><a name="line.262"></a>
 <span class="sourceLineNo">263</span>  /**<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   * Check if the readOnly flag of the table is set. If the readOnly flag is set<a name="line.264"></a>
-<span class="sourceLineNo">265</span>   * then the contents of the table can only be read from but not modified.<a name="line.265"></a>
+<span class="sourceLineNo">264</span>   * Check if there is the target region count. If so, the normalize plan will<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   * be calculated based on the target region count.<a name="line.265"></a>
 <span class="sourceLineNo">266</span>   *<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * @return true if all columns in the table should be read only<a name="line.267"></a>
+<span class="sourceLineNo">267</span>   * @return target region count after normalize done<a name="line.267"></a>
 <span class="sourceLineNo">268</span>   */<a name="line.268"></a>
-<span class="sourceLineNo">269</span>  boolean isReadOnly();<a name="line.269"></a>
+<span class="sourceLineNo">269</span>  int getNormalizerTargetRegionCount();<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>   * Check if any of the table's cfs' replication scope are set to<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   * {@link HConstants#REPLICATION_SCOPE_GLOBAL}.<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * @return {@code true} if we have, otherwise {@code false}.<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  default boolean hasGlobalReplicationScope() {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    return Stream.of(getColumnFamilies())<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      .anyMatch(cf -&gt; cf.getScope() == HConstants.REPLICATION_SCOPE_GLOBAL);<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>  /**<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * Check if the table's cfs' replication scope matched with the replication state<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * @param enabled replication state<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   * @return true if matched, otherwise false<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   */<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  default boolean matchReplicationScope(boolean enabled) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    boolean hasEnabled = false;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    boolean hasDisabled = false;<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span>    for (ColumnFamilyDescriptor cf : getColumnFamilies()) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      if (cf.getScope() != HConstants.REPLICATION_SCOPE_GLOBAL) {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>        hasDisabled = true;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      } else {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        hasEnabled = true;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      }<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>    if (hasEnabled &amp;&amp; hasDisabled) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      return false;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    if (hasEnabled) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      return enabled;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    return !enabled;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  }<a name="line.305"></a>
-<span class="sourceLineNo">306</span>}<a name="line.306"></a>
+<span class="sourceLineNo">272</span>   * Check if there is the target region size. If so, the normalize plan will<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   * be calculated based on the target region size.<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   *<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * @return target region size after normalize done<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   */<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  long getNormalizerTargetRegionSize();<a name="line.277"></a>
+<span class="sourceLineNo">278</span><a name="line.278"></a>
+<span class="sourceLineNo">279</span>  /**<a name="line.279"></a>
+<span class="sourceLineNo">280</span>   * Check if the readOnly flag of the table is set. If the readOnly flag is set<a name="line.280"></a>
+<span class="sourceLineNo">281</span>   * then the contents of the table can only be read from but not modified.<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   *<a name="line.282"></a>
+<span class="sourceLineNo">283</span>   * @return true if all columns in the table should be read only<a name="line.283"></a>
+<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  boolean isReadOnly();<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span>  /**<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * Check if any of the table's cfs' replication scope are set to<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   * {@link HConstants#REPLICATION_SCOPE_GLOBAL}.<a name="line.289"></a>
+<span class="sourceLineNo">290</span>   * @return {@code true} if we have, otherwise {@code false}.<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   */<a name="line.291"></a>
+<span class="sourceLineNo">292</span>  default boolean hasGlobalReplicationScope() {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    return Stream.of(getColumnFamilies())<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      .anyMatch(cf -&gt; cf.getScope() == HConstants.REPLICATION_SCOPE_GLOBAL);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
+<span class="sourceLineNo">296</span><a name="line.296"></a>
+<span class="sourceLineNo">297</span>  /**<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   * Check if the table's cfs' replication scope matched with the replication state<a name="line.298"></a>
+<span class="sourceLineNo">299</span>   * @param enabled replication state<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * @return true if matched, otherwise false<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   */<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  default boolean matchReplicationScope(boolean enabled) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    boolean hasEnabled = false;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    boolean hasDisabled = false;<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span>    for (ColumnFamilyDescriptor cf : getColumnFamilies()) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      if (cf.getScope() != HConstants.REPLICATION_SCOPE_GLOBAL) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        hasDisabled = true;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      } else {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        hasEnabled = true;<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>    if (hasEnabled &amp;&amp; hasDisabled) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      return false;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    if (hasEnabled) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      return enabled;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    return !enabled;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>}<a name="line.322"></a>
 
 
 


[08/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html
index 9c54904..0a656db 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html
@@ -1371,589 +1371,581 @@
 <span class="sourceLineNo">1363</span>    assert subprocStack != null : "Called rollback with no steps executed rootProc=" + rootProc;<a name="line.1363"></a>
 <span class="sourceLineNo">1364</span><a name="line.1364"></a>
 <span class="sourceLineNo">1365</span>    int stackTail = subprocStack.size();<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>    boolean reuseLock = false;<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>    while (stackTail --&gt; 0) {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>      Procedure&lt;TEnvironment&gt; proc = subprocStack.get(stackTail);<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span><a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>      LockState lockState;<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>      if (!reuseLock &amp;&amp; (lockState = acquireLock(proc)) != LockState.LOCK_ACQUIRED) {<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>        // can't take a lock on the procedure, add the root-proc back on the<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>        // queue waiting for the lock availability<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>        return lockState;<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>      }<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span><a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      lockState = executeRollback(proc);<a name="line.1377"></a>
+<span class="sourceLineNo">1366</span>    while (stackTail-- &gt; 0) {<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>      Procedure&lt;TEnvironment&gt; proc = subprocStack.get(stackTail);<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span><a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>      LockState lockState = acquireLock(proc);<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>      if (lockState != LockState.LOCK_ACQUIRED) {<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>        // can't take a lock on the procedure, add the root-proc back on the<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>        // queue waiting for the lock availability<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>        return lockState;<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>      }<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span><a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>      lockState = executeRollback(proc);<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      releaseLock(proc, false);<a name="line.1377"></a>
 <span class="sourceLineNo">1378</span>      boolean abortRollback = lockState != LockState.LOCK_ACQUIRED;<a name="line.1378"></a>
 <span class="sourceLineNo">1379</span>      abortRollback |= !isRunning() || !store.isRunning();<a name="line.1379"></a>
 <span class="sourceLineNo">1380</span><a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      // If the next procedure is the same to this one<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      // (e.g. StateMachineProcedure reuse the same instance)<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      // we can avoid to lock/unlock each step<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>      reuseLock = stackTail &gt; 0 &amp;&amp; (subprocStack.get(stackTail - 1) == proc) &amp;&amp; !abortRollback;<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>      if (!reuseLock &amp;&amp; proc.hasLock()) {<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        releaseLock(proc, false);<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>      }<a name="line.1387"></a>
+<span class="sourceLineNo">1381</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      // useful to test the procedure recovery.<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>      if (abortRollback) {<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>        return lockState;<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>      }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span><a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>      subprocStack.remove(stackTail);<a name="line.1387"></a>
 <span class="sourceLineNo">1388</span><a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>      // useful to test the procedure recovery.<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      if (abortRollback) {<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>        return lockState;<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>      }<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span><a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>      subprocStack.remove(stackTail);<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span><a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>      if (proc.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>        return LockState.LOCK_YIELD_WAIT;<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>      }<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span><a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>      if (proc != rootProc) {<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>        execCompletionCleanup(proc);<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      }<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>    }<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span><a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    // Finalize the procedure state<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>    LOG.info("Rolled back " + rootProc +<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>             " exec-time=" + StringUtils.humanTimeDiff(rootProc.elapsedTime()));<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>    procedureFinished(rootProc);<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>    return LockState.LOCK_ACQUIRED;<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>  }<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span><a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>  /**<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>   * Execute the rollback of the procedure step.<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>   * It updates the store with the new state (stack index)<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>   * or will remove completly the procedure in case it is a child.<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>   */<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>  private LockState executeRollback(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>    try {<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>      proc.doRollback(getEnvironment());<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>    } catch (IOException e) {<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>      LOG.debug("Roll back attempt failed for {}", proc, e);<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>    } catch (InterruptedException e) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>      handleInterruptedException(proc, e);<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>    } catch (Throwable e) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>      LOG.error(HBaseMarkers.FATAL, "CODE-BUG: Uncaught runtime exception for " + proc, e);<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>    }<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span><a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>    // allows to kill the executor before something is stored to the wal.<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>    // useful to test the procedure recovery.<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>    if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate()) {<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>      String msg = "TESTING: Kill before store update";<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>      LOG.debug(msg);<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      stop();<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>      throw new RuntimeException(msg);<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    }<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span><a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>    if (proc.removeStackIndex()) {<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      proc.setState(ProcedureState.ROLLEDBACK);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span><a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      // update metrics on finishing the procedure (fail)<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>      proc.updateMetricsOnFinish(getEnvironment(), proc.elapsedTime(), false);<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span><a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>      if (proc.hasParent()) {<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>        store.delete(proc.getProcId());<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>        procedures.remove(proc.getProcId());<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      } else {<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>        final long[] childProcIds = rollbackStack.get(proc.getProcId()).getSubprocedureIds();<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>        if (childProcIds != null) {<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>          store.delete(proc, childProcIds);<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>        } else {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>          store.update(proc);<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>        }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      }<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>    } else {<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>      store.update(proc);<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    }<a name="line.1461"></a>
+<span class="sourceLineNo">1389</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>      if (proc.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        return LockState.LOCK_YIELD_WAIT;<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span><a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      if (proc != rootProc) {<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>        execCompletionCleanup(proc);<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>      }<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>    }<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span><a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>    // Finalize the procedure state<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>    LOG.info("Rolled back " + rootProc +<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>             " exec-time=" + StringUtils.humanTimeDiff(rootProc.elapsedTime()));<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>    procedureFinished(rootProc);<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>    return LockState.LOCK_ACQUIRED;<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>  }<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span><a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>  /**<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>   * Execute the rollback of the procedure step.<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>   * It updates the store with the new state (stack index)<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>   * or will remove completly the procedure in case it is a child.<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>   */<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>  private LockState executeRollback(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>    try {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>      proc.doRollback(getEnvironment());<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>    } catch (IOException e) {<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      LOG.debug("Roll back attempt failed for {}", proc, e);<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>    } catch (InterruptedException e) {<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>      handleInterruptedException(proc, e);<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>    } catch (Throwable e) {<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>      LOG.error(HBaseMarkers.FATAL, "CODE-BUG: Uncaught runtime exception for " + proc, e);<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>    }<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span><a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>    // allows to kill the executor before something is stored to the wal.<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    // useful to test the procedure recovery.<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>    if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate()) {<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>      String msg = "TESTING: Kill before store update";<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      LOG.debug(msg);<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      stop();<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>      throw new RuntimeException(msg);<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>    }<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span><a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>    if (proc.removeStackIndex()) {<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>      proc.setState(ProcedureState.ROLLEDBACK);<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span><a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>      // update metrics on finishing the procedure (fail)<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>      proc.updateMetricsOnFinish(getEnvironment(), proc.elapsedTime(), false);<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span><a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>      if (proc.hasParent()) {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>        store.delete(proc.getProcId());<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>        procedures.remove(proc.getProcId());<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      } else {<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>        final long[] childProcIds = rollbackStack.get(proc.getProcId()).getSubprocedureIds();<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>        if (childProcIds != null) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>          store.delete(proc, childProcIds);<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>        } else {<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>          store.update(proc);<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>        }<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>      }<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>    } else {<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>      store.update(proc);<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>    }<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span><a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>    return LockState.LOCK_ACQUIRED;<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>  }<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span><a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>  private void yieldProcedure(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>    releaseLock(proc, false);<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    scheduler.yield(proc);<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>  }<a name="line.1461"></a>
 <span class="sourceLineNo">1462</span><a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>    return LockState.LOCK_ACQUIRED;<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>  }<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span><a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>  private void yieldProcedure(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>    releaseLock(proc, false);<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>    scheduler.yield(proc);<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>  }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span><a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>  /**<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>   * Executes &lt;code&gt;procedure&lt;/code&gt;<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>   * &lt;ul&gt;<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>   *  &lt;li&gt;Calls the doExecute() of the procedure<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>   *  &lt;li&gt;If the procedure execution didn't fail (i.e. valid user input)<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>   *  &lt;ul&gt;<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>   *    &lt;li&gt;...and returned subprocedures<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>   *    &lt;ul&gt;&lt;li&gt;The subprocedures are initialized.<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>   *      &lt;li&gt;The subprocedures are added to the store<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>   *      &lt;li&gt;The subprocedures are added to the runnable queue<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>   *      &lt;li&gt;The procedure is now in a WAITING state, waiting for the subprocedures to complete<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>   *    &lt;/ul&gt;<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>   *    &lt;/li&gt;<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>   *   &lt;li&gt;...if there are no subprocedure<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>   *    &lt;ul&gt;&lt;li&gt;the procedure completed successfully<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>   *      &lt;li&gt;if there is a parent (WAITING)<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>   *      &lt;li&gt;the parent state will be set to RUNNABLE<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>   *    &lt;/ul&gt;<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>   *   &lt;/li&gt;<a name="line.1489"></a>
+<span class="sourceLineNo">1463</span>  /**<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>   * Executes &lt;code&gt;procedure&lt;/code&gt;<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>   * &lt;ul&gt;<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>   *  &lt;li&gt;Calls the doExecute() of the procedure<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>   *  &lt;li&gt;If the procedure execution didn't fail (i.e. valid user input)<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>   *  &lt;ul&gt;<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>   *    &lt;li&gt;...and returned subprocedures<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>   *    &lt;ul&gt;&lt;li&gt;The subprocedures are initialized.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>   *      &lt;li&gt;The subprocedures are added to the store<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>   *      &lt;li&gt;The subprocedures are added to the runnable queue<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>   *      &lt;li&gt;The procedure is now in a WAITING state, waiting for the subprocedures to complete<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>   *    &lt;/ul&gt;<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>   *    &lt;/li&gt;<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>   *   &lt;li&gt;...if there are no subprocedure<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>   *    &lt;ul&gt;&lt;li&gt;the procedure completed successfully<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>   *      &lt;li&gt;if there is a parent (WAITING)<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>   *      &lt;li&gt;the parent state will be set to RUNNABLE<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>   *    &lt;/ul&gt;<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>   *   &lt;/li&gt;<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>   *  &lt;/ul&gt;<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>   *  &lt;/li&gt;<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>   *  &lt;li&gt;In case of failure<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>   *  &lt;ul&gt;<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>   *    &lt;li&gt;The store is updated with the new state&lt;/li&gt;<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>   *    &lt;li&gt;The executor (caller of this method) will start the rollback of the procedure&lt;/li&gt;<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>   *  &lt;/ul&gt;<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>   *  &lt;/li&gt;<a name="line.1489"></a>
 <span class="sourceLineNo">1490</span>   *  &lt;/ul&gt;<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>   *  &lt;/li&gt;<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>   *  &lt;li&gt;In case of failure<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>   *  &lt;ul&gt;<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>   *    &lt;li&gt;The store is updated with the new state&lt;/li&gt;<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>   *    &lt;li&gt;The executor (caller of this method) will start the rollback of the procedure&lt;/li&gt;<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>   *  &lt;/ul&gt;<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>   *  &lt;/li&gt;<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>   *  &lt;/ul&gt;<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>   */<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  private void execProcedure(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>    Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>        "NOT RUNNABLE! " + procedure.toString());<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span><a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    // Procedures can suspend themselves. They skip out by throwing a ProcedureSuspendedException.<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    // The exception is caught below and then we hurry to the exit without disturbing state. The<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>    // idea is that the processing of this procedure will be unsuspended later by an external event<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>    // such the report of a region open.<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    boolean suspended = false;<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span><a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    // Whether to 're-' -execute; run through the loop again.<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>    boolean reExecute = false;<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span><a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    Procedure&lt;TEnvironment&gt;[] subprocs = null;<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>    do {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>      reExecute = false;<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>      try {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>        subprocs = procedure.doExecute(getEnvironment());<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>        if (subprocs != null &amp;&amp; subprocs.length == 0) {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>          subprocs = null;<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        }<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      } catch (ProcedureSuspendedException e) {<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        LOG.trace("Suspend {}", procedure);<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>        suspended = true;<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>      } catch (ProcedureYieldException e) {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>        LOG.trace("Yield {}", procedure, e);<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>        yieldProcedure(procedure);<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>        return;<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      } catch (InterruptedException e) {<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        LOG.trace("Yield interrupt {}", procedure, e);<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>        handleInterruptedException(procedure, e);<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>        yieldProcedure(procedure);<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>        return;<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>      } catch (Throwable e) {<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>        // Catch NullPointerExceptions or similar errors...<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>        String msg = "CODE-BUG: Uncaught runtime exception: " + procedure;<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>        LOG.error(msg, e);<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>        procedure.setFailure(new RemoteProcedureException(msg, e));<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>      }<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span><a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      if (!procedure.isFailed()) {<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>        if (subprocs != null) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>          if (subprocs.length == 1 &amp;&amp; subprocs[0] == procedure) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>            // Procedure returned itself. Quick-shortcut for a state machine-like procedure;<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>            // i.e. we go around this loop again rather than go back out on the scheduler queue.<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>            subprocs = null;<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>            reExecute = true;<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>            LOG.trace("Short-circuit to next step on pid={}", procedure.getProcId());<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          } else {<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>            // Yield the current procedure, and make the subprocedure runnable<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>            // subprocs may come back 'null'.<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            subprocs = initializeChildren(procStack, procedure, subprocs);<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            LOG.info("Initialized subprocedures=" +<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>              (subprocs == null? null:<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>                Stream.of(subprocs).map(e -&gt; "{" + e.toString() + "}").<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>                collect(Collectors.toList()).toString()));<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>          }<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>        } else if (procedure.getState() == ProcedureState.WAITING_TIMEOUT) {<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>          LOG.trace("Added to timeoutExecutor {}", procedure);<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>          timeoutExecutor.add(procedure);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>        } else if (!suspended) {<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>          // No subtask, so we are done<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>          procedure.setState(ProcedureState.SUCCESS);<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        }<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      }<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span><a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>      // Add the procedure to the stack<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      procStack.addRollbackStep(procedure);<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span><a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      // useful to test the procedure recovery.<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>      if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate(suspended)) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>        String msg = "TESTING: Kill before store update: " + procedure;<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>        LOG.debug(msg);<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>        stop();<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        throw new RuntimeException(msg);<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>      }<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span><a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>      //<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      // Commit the transaction even if a suspend (state may have changed). Note this append<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      // can take a bunch of time to complete.<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span><a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      // if the store is not running we are aborting<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      if (!store.isRunning()) {<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>        return;<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>      }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>        yieldProcedure(procedure);<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>        return;<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>      }<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>    } while (reExecute);<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    // Submit the new subprocedures<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>      submitChildrenProcedures(subprocs);<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>    }<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span><a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>    // we need to log the release lock operation before waking up the parent procedure, as there<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    // could be race that the parent procedure may call updateStoreOnExec ahead of us and remove all<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>    // the sub procedures from store and cause problems...<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    releaseLock(procedure, false);<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span><a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>    // if the procedure is complete and has a parent, count down the children latch.<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>    // If 'suspended', do nothing to change state -- let other threads handle unsuspend event.<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    if (!suspended &amp;&amp; procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      countDownChildren(procStack, procedure);<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span><a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>  private Procedure&lt;TEnvironment&gt;[] initializeChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    assert subprocs != null : "expected subprocedures";<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      if (subproc == null) {<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>          new IllegalArgumentIOException(msg)));<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>        return null;<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>      }<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span><a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>      subproc.setRootProcId(rootProcId);<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>      subproc.setProcId(nextProcId());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>      procStack.addSubProcedure(subproc);<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>    }<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span><a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    if (!procedure.isFailed()) {<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>      switch (procedure.getState()) {<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>        case RUNNABLE:<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>          break;<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>        case WAITING_TIMEOUT:<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>          timeoutExecutor.add(procedure);<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>          break;<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>        default:<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>          break;<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>      }<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>    }<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    return subprocs;<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>  }<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span><a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>  private void submitChildrenProcedures(Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>      subproc.updateMetricsOnSubmit(getEnvironment());<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      scheduler.addFront(subproc);<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>  }<a name="line.1663"></a>
+<span class="sourceLineNo">1491</span>   */<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>  private void execProcedure(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>    Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>        "NOT RUNNABLE! " + procedure.toString());<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span><a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>    // Procedures can suspend themselves. They skip out by throwing a ProcedureSuspendedException.<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>    // The exception is caught below and then we hurry to the exit without disturbing state. The<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>    // idea is that the processing of this procedure will be unsuspended later by an external event<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>    // such the report of a region open.<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>    boolean suspended = false;<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span><a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    // Whether to 're-' -execute; run through the loop again.<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>    boolean reExecute = false;<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span><a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>    Procedure&lt;TEnvironment&gt;[] subprocs = null;<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>    do {<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>      reExecute = false;<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      try {<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>        subprocs = procedure.doExecute(getEnvironment());<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>        if (subprocs != null &amp;&amp; subprocs.length == 0) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>          subprocs = null;<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        }<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>      } catch (ProcedureSuspendedException e) {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>        LOG.trace("Suspend {}", procedure);<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>        suspended = true;<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>      } catch (ProcedureYieldException e) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>        LOG.trace("Yield {}", procedure, e);<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>        yieldProcedure(procedure);<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>        return;<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>      } catch (InterruptedException e) {<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        LOG.trace("Yield interrupt {}", procedure, e);<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>        handleInterruptedException(procedure, e);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>        yieldProcedure(procedure);<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>        return;<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      } catch (Throwable e) {<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>        // Catch NullPointerExceptions or similar errors...<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>        String msg = "CODE-BUG: Uncaught runtime exception: " + procedure;<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>        LOG.error(msg, e);<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>        procedure.setFailure(new RemoteProcedureException(msg, e));<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>      }<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span><a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      if (!procedure.isFailed()) {<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>        if (subprocs != null) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>          if (subprocs.length == 1 &amp;&amp; subprocs[0] == procedure) {<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>            // Procedure returned itself. Quick-shortcut for a state machine-like procedure;<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>            // i.e. we go around this loop again rather than go back out on the scheduler queue.<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>            subprocs = null;<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>            reExecute = true;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>            LOG.trace("Short-circuit to next step on pid={}", procedure.getProcId());<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>          } else {<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>            // Yield the current procedure, and make the subprocedure runnable<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>            // subprocs may come back 'null'.<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>            subprocs = initializeChildren(procStack, procedure, subprocs);<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>            LOG.info("Initialized subprocedures=" +<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>              (subprocs == null? null:<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>                Stream.of(subprocs).map(e -&gt; "{" + e.toString() + "}").<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>                collect(Collectors.toList()).toString()));<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>          }<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>        } else if (procedure.getState() == ProcedureState.WAITING_TIMEOUT) {<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>          LOG.trace("Added to timeoutExecutor {}", procedure);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>          timeoutExecutor.add(procedure);<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>        } else if (!suspended) {<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          // No subtask, so we are done<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          procedure.setState(ProcedureState.SUCCESS);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>        }<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>      }<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span><a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>      // Add the procedure to the stack<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>      procStack.addRollbackStep(procedure);<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span><a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>      // useful to test the procedure recovery.<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>      if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate(suspended)) {<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>        String msg = "TESTING: Kill before store update: " + procedure;<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        LOG.debug(msg);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>        stop();<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>        throw new RuntimeException(msg);<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>      }<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span><a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      //<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>      // Commit the transaction even if a suspend (state may have changed). Note this append<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>      // can take a bunch of time to complete.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span><a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      // if the store is not running we are aborting<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>      if (!store.isRunning()) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>        return;<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>      }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>        yieldProcedure(procedure);<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>        return;<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>      }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>    } while (reExecute);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>    // Submit the new subprocedures<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      submitChildrenProcedures(subprocs);<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>    }<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span><a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    // we need to log the release lock operation before waking up the parent procedure, as there<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    // could be race that the parent procedure may call updateStoreOnExec ahead of us and remove all<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    // the sub procedures from store and cause problems...<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    releaseLock(procedure, false);<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span><a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    // if the procedure is complete and has a parent, count down the children latch.<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>    // If 'suspended', do nothing to change state -- let other threads handle unsuspend event.<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    if (!suspended &amp;&amp; procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      countDownChildren(procStack, procedure);<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>    }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>  }<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span><a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>  private Procedure&lt;TEnvironment&gt;[] initializeChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    assert subprocs != null : "expected subprocedures";<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>      if (subproc == null) {<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>          new IllegalArgumentIOException(msg)));<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>        return null;<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>      }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span><a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      subproc.setRootProcId(rootProcId);<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      subproc.setProcId(nextProcId());<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      procStack.addSubProcedure(subproc);<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>    }<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span><a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>    if (!procedure.isFailed()) {<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>      switch (procedure.getState()) {<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>        case RUNNABLE:<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>          break;<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        case WAITING_TIMEOUT:<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>          timeoutExecutor.add(procedure);<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>          break;<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>        default:<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          break;<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>      }<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>    }<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    return subprocs;<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>  }<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span><a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>  private void submitChildrenProcedures(Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>      subproc.updateMetricsOnSubmit(getEnvironment());<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>      scheduler.addFront(subproc);<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    }<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>  }<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span><a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>  private void countDownChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    Procedure&lt;TEnvironment&gt; parent = procedures.get(procedure.getParentProcId());<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    if (parent == null) {<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>      assert procStack.isRollingback();<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>      return;<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    }<a name="line.1663"></a>
 <span class="sourceLineNo">1664</span><a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>  private void countDownChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>    Procedure&lt;TEnvironment&gt; parent = procedures.get(procedure.getParentProcId());<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    if (parent == null) {<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      assert procStack.isRollingback();<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>      return;<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>    }<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span><a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>    // If this procedure is the last child awake the parent procedure<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>    if (parent.tryRunnable()) {<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>      // If we succeeded in making the parent runnable -- i.e. all of its<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      // children have completed, move parent to front of the queue.<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      store.update(parent);<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      scheduler.addFront(parent);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      LOG.info("Finished subprocedure(s) of " + parent + "; resume parent processing.");<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>      return;<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>    }<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>  }<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span><a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>  private void updateStoreOnExec(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>      if (LOG.isTraceEnabled()) {<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>      }<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      store.insert(procedure, subprocs);<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>    } else {<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      LOG.trace("Store update {}", procedure);<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>        // remove child procedures<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        if (childProcIds != null) {<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>          store.delete(procedure, childProcIds);<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>            procedures.remove(childProcIds[i]);<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>          }<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>        } else {<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>          store.update(procedure);<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      } else {<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        store.update(procedure);<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>      }<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>    }<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>  }<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span><a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>  private void handleInterruptedException(Procedure&lt;TEnvironment&gt; proc, InterruptedException e) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>    LOG.trace("Interrupt during {}. suspend and retry it later.", proc, e);<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>    // and the executor/store will be stopped.<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>  }<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span><a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>  private void execCompletionCleanup(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    final TEnvironment env = getEnvironment();<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>    if (proc.hasLock()) {<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>      LOG.warn("Usually this should not happen, we will release the lock before if the procedure" +<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>        " is finished, even if the holdLock is true, arrive here means we have some holes where" +<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        " we do not release the lock. And the releaseLock below may fail since the procedure may" +<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>        " have already been deleted from the procedure store.");<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>      releaseLock(proc, true);<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>    }<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>    try {<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>      proc.completionCleanup(env);<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>    } catch (Throwable e) {<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>    }<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>  }<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span><a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>  private void procedureFinished(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>    // call the procedure completion cleanup handler<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>    execCompletionCleanup(proc);<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span><a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>    CompletedProcedureRetainer&lt;TEnvironment&gt; retainer = new CompletedProcedureRetainer&lt;&gt;(proc);<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span><a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>    // update the executor internal state maps<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>      retainer.setClientAckTime(0);<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>    }<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span><a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>    completed.put(proc.getProcId(), retainer);<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>    rollbackStack.remove(proc.getProcId());<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    procedures.remove(proc.getProcId());<a name="line.1749"></a>
+<span class="sourceLineNo">1665</span>    // If this procedure is the last child awake the parent procedure<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>    if (parent.tryRunnable()) {<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>      // If we succeeded in making the parent runnable -- i.e. all of its<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      // children have completed, move parent to front of the queue.<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>      store.update(parent);<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>      scheduler.addFront(parent);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      LOG.info("Finished subprocedure(s) of " + parent + "; resume parent processing.");<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>      return;<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>    }<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>  }<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span><a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>  private void updateStoreOnExec(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      if (LOG.isTraceEnabled()) {<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>      }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      store.insert(procedure, subprocs);<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>    } else {<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      LOG.trace("Store update {}", procedure);<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>        // remove child procedures<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>        if (childProcIds != null) {<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>          store.delete(procedure, childProcIds);<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>            procedures.remove(childProcIds[i]);<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>          }<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>        } else {<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>          store.update(procedure);<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>        }<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>      } else {<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>        store.update(procedure);<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      }<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>    }<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>  }<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span><a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>  private void handleInterruptedException(Procedure&lt;TEnvironment&gt; proc, InterruptedException e) {<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>    LOG.trace("Interrupt during {}. suspend and retry it later.", proc, e);<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>    // and the executor/store will be stopped.<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>  }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span><a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  private void execCompletionCleanup(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>    final TEnvironment env = getEnvironment();<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>    if (proc.hasLock()) {<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      LOG.warn("Usually this should not happen, we will release the lock before if the procedure" +<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>        " is finished, even if the holdLock is true, arrive here means we have some holes where" +<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        " we do not release the lock. And the releaseLock below may fail since the procedure may" +<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        " have already been deleted from the procedure store.");<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      releaseLock(proc, true);<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>    }<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>    try {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>      proc.completionCleanup(env);<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>    } catch (Throwable e) {<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>    }<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>  }<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span><a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>  private void procedureFinished(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    // call the procedure completion cleanup handler<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>    execCompletionCleanup(proc);<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span><a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>    CompletedProcedureRetainer&lt;TEnvironment&gt; retainer = new CompletedProcedureRetainer&lt;&gt;(proc);<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span><a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>    // update the executor internal state maps<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>      retainer.setClientAckTime(0);<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>    }<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span><a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>    completed.put(proc.getProcId(), retainer);<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>    rollbackStack.remove(proc.getProcId());<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>    procedures.remove(proc.getProcId());<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span><a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>    // call the runnableSet completion cleanup handler<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>    try {<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>      scheduler.completionCleanup(proc);<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>    } catch (Throwable e) {<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: {}", proc, e);<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
 <span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    // call the runnableSet completion cleanup handler<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    try {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      scheduler.completionCleanup(proc);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>    } catch (Throwable e) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: {}", proc, e);<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>    }<a name="line.1757"></a>
+<span class="sourceLineNo">1751</span>    // Notify the listeners<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>  }<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span><a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>  RootProcedureState&lt;TEnvironment&gt; getProcStack(long rootProcId) {<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    return rollbackStack.get(rootProcId);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>  }<a name="line.1757"></a>
 <span class="sourceLineNo">1758</span><a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>    // Notify the listeners<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span><a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>  RootProcedureState&lt;TEnvironment&gt; getProcStack(long rootProcId) {<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>    return rollbackStack.get(rootProcId);<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  }<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>  // ==========================================================================<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>  //  Worker Thread<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>  // ==========================================================================<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>  private class WorkerThread extends StoppableThread {<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    private volatile Procedure&lt;TEnvironment&gt; activeProcedure;<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    public WorkerThread(ThreadGroup group) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      this(group, "PEWorker-");<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    }<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span><a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    protected WorkerThread(ThreadGroup group, String prefix) {<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>      super(group, prefix + workerId.incrementAndGet());<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>      setDaemon(true);<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span><a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>    @Override<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    public void sendStopSignal() {<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      scheduler.signalAll();<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    }<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span><a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>    @Override<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>    public void run() {<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      try {<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>        while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>          Procedure&lt;TEnvironment&gt; proc = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>          if (proc == null) {<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>            continue;<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>          }<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>          this.activeProcedure = proc;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>          int activeCount = activeExecutorCount.incrementAndGet();<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>          int runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>          LOG.trace("Execute pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>            runningCount, activeCount);<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>          executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>          IdLock.Entry lockEntry = procExecutionLock.getLockEntry(proc.getProcId());<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>          try {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>            executeProcedure(proc);<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>          } catch (AssertionError e) {<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            LOG.info("ASSERT pid=" + proc.getProcId(), e);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            throw e;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          } finally {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>            procExecutionLock.releaseLockEntry(lockEntry);<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>            activeCount = activeExecutorCount.decrementAndGet();<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>            runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>            LOG.trace("Halt pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>              runningCount, activeCount);<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>            this.activeProcedure = null;<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>            lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>            executionStartTime.set(Long.MAX_VALUE);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>          }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>        }<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>      } catch (Throwable t) {<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        LOG.warn("Worker terminating UNNATURALLY {}", this.activeProcedure, t);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>      } finally {<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        LOG.trace("Worker terminated.");<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>      }<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>      workerThreads.remove(this);<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    }<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    @Override<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    public String toString() {<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      Procedure&lt;?&gt; p = this.activeProcedure;<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>      return getName() + "(pid=" + (p == null? Procedure.NO_PROC_ID: p.getProcId() + ")");<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>    }<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span><a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    /**<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>     * @return the time since the current procedure is running<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>     */<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    public long getCurrentRunTime() {<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>    }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span><a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    // core worker never timeout<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>      return true;

<TRUNCATED>

[18/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
index e3af5a0..4ee7d52 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
@@ -131,7 +131,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1770">ProcedureExecutor.WorkerThread</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1762">ProcedureExecutor.WorkerThread</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThread.html" title="class in org.apache.hadoop.hbase.procedure2">StoppableThread</a></pre>
 </li>
 </ul>
@@ -282,7 +282,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
 <ul class="blockList">
 <li class="blockList">
 <h4>executionStartTime</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1771">executionStartTime</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1763">executionStartTime</a></pre>
 </li>
 </ul>
 <a name="activeProcedure">
@@ -291,7 +291,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
 <ul class="blockListLast">
 <li class="blockList">
 <h4>activeProcedure</h4>
-<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1772">activeProcedure</a></pre>
+<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1764">activeProcedure</a></pre>
 </li>
 </ul>
 </li>
@@ -308,7 +308,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
 <ul class="blockList">
 <li class="blockList">
 <h4>WorkerThread</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1774">WorkerThread</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html?is-external=true" title="class or interface in java.lang">ThreadGroup</a>&nbsp;group)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1766">WorkerThread</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html?is-external=true" title="class or interface in java.lang">ThreadGroup</a>&nbsp;group)</pre>
 </li>
 </ul>
 <a name="WorkerThread-java.lang.ThreadGroup-java.lang.String-">
@@ -317,7 +317,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WorkerThread</h4>
-<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1778">WorkerThread</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html?is-external=true" title="class or interface in java.lang">ThreadGroup</a>&nbsp;group,
+<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1770">WorkerThread</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html?is-external=true" title="class or interface in java.lang">ThreadGroup</a>&nbsp;group,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;prefix)</pre>
 </li>
 </ul>
@@ -335,7 +335,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
 <ul class="blockList">
 <li class="blockList">
 <h4>sendStopSignal</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1784">sendStopSignal</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1776">sendStopSignal</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThread.html#sendStopSignal--">sendStopSignal</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThread.html" title="class in org.apache.hadoop.hbase.procedure2">StoppableThread</a></code></dd>
@@ -348,7 +348,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1789">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1781">run</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true#run--" title="class or interface in java.lang">run</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>
@@ -363,7 +363,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1829">toString</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1821">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a></code></dd>
@@ -376,7 +376,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentRunTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1837">getCurrentRunTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1829">getCurrentRunTime</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the time since the current procedure is running</dd>
@@ -389,7 +389,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
 <ul class="blockListLast">
 <li class="blockList">
 <h4>keepAlive</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1842">keepAlive</a>(long&nbsp;lastUpdate)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1834">keepAlive</a>(long&nbsp;lastUpdate)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
index 44d141d..3db13c6 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
@@ -1690,7 +1690,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>executeRollback</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1419">executeRollback</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;proc)</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1411">executeRollback</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;proc)</pre>
 <div class="block">Execute the rollback of the procedure step.
  It updates the store with the new state (stack index)
  or will remove completly the procedure in case it is a child.</div>
@@ -1702,7 +1702,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>yieldProcedure</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1466">yieldProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;proc)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1458">yieldProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;proc)</pre>
 </li>
 </ul>
 <a name="execProcedure-org.apache.hadoop.hbase.procedure2.RootProcedureState-org.apache.hadoop.hbase.procedure2.Procedure-">
@@ -1711,7 +1711,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>execProcedure</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1500">execProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;procStack,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1492">execProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;procStack,
                            <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;procedure)</pre>
 <div class="block">Executes <code>procedure</code>
  <ul>
@@ -1748,7 +1748,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeChildren</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1619">initializeChildren</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;procStack,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1611">initializeChildren</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;procStack,
                                                      <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;procedure,
                                                      <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;[]&nbsp;subprocs)</pre>
 </li>
@@ -1759,7 +1759,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>submitChildrenProcedures</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1655">submitChildrenProcedures</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;[]&nbsp;subprocs)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1647">submitChildrenProcedures</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;[]&nbsp;subprocs)</pre>
 </li>
 </ul>
 <a name="countDownChildren-org.apache.hadoop.hbase.procedure2.RootProcedureState-org.apache.hadoop.hbase.procedure2.Procedure-">
@@ -1768,7 +1768,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>countDownChildren</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1665">countDownChildren</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;procStack,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1657">countDownChildren</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;procStack,
                                <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;procedure)</pre>
 </li>
 </ul>
@@ -1778,7 +1778,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>updateStoreOnExec</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1684">updateStoreOnExec</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;procStack,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1676">updateStoreOnExec</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;procStack,
                                <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;procedure,
                                <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;[]&nbsp;subprocs)</pre>
 </li>
@@ -1789,7 +1789,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>handleInterruptedException</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1710">handleInterruptedException</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;proc,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1702">handleInterruptedException</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;proc,
                                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>&nbsp;e)</pre>
 </li>
 </ul>
@@ -1799,7 +1799,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>execCompletionCleanup</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1719">execCompletionCleanup</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;proc)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1711">execCompletionCleanup</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;proc)</pre>
 </li>
 </ul>
 <a name="procedureFinished-org.apache.hadoop.hbase.procedure2.Procedure-">
@@ -1808,7 +1808,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>procedureFinished</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1736">procedureFinished</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;proc)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1728">procedureFinished</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;proc)</pre>
 </li>
 </ul>
 <a name="getProcStack-long-">
@@ -1817,7 +1817,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getProcStack</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1763">getProcStack</a>(long&nbsp;rootProcId)</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1755">getProcStack</a>(long&nbsp;rootProcId)</pre>
 </li>
 </ul>
 </li>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/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 51b8c05..7b63aa1 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/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
 <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/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/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 3b96953..f45bb99 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -708,20 +708,20 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/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/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/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/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/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/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/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/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 19354d1..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,8 +247,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/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/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>

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/org/apache/hadoop/hbase/util/class-use/Bytes.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/class-use/Bytes.html b/devapidocs/org/apache/hadoop/hbase/util/class-use/Bytes.html
index d233f82..806d7f8 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/class-use/Bytes.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/class-use/Bytes.html
@@ -367,6 +367,14 @@
 <td class="colLast"><span class="typeNameLabel">TableDescriptorBuilder.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#NORMALIZATION_ENABLED_KEY">NORMALIZATION_ENABLED_KEY</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private static <a href="../../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TableDescriptorBuilder.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#NORMALIZER_TARGET_REGION_COUNT_KEY">NORMALIZER_TARGET_REGION_COUNT_KEY</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="../../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TableDescriptorBuilder.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#NORMALIZER_TARGET_REGION_SIZE_KEY">NORMALIZER_TARGET_REGION_SIZE_KEY</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TableDescriptorBuilder.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#OWNER_KEY">OWNER_KEY</a></span></code>&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/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 bd47e2e..4e90595 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -515,14 +515,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/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/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/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/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/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/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.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/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/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 </ul>
 </li>
 </ul>


[15/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html
index fc17f3d..16c2238 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html
@@ -158,1296 +158,1356 @@
 <span class="sourceLineNo">150</span>  private static final Bytes NORMALIZATION_ENABLED_KEY<a name="line.150"></a>
 <span class="sourceLineNo">151</span>          = new Bytes(Bytes.toBytes(NORMALIZATION_ENABLED));<a name="line.151"></a>
 <span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  /**<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   * Default durability for HTD is USE_DEFAULT, which defaults to HBase-global<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   * default value<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  private static final Durability DEFAULT_DURABLITY = Durability.USE_DEFAULT;<a name="line.157"></a>
+<span class="sourceLineNo">153</span>  @InterfaceAudience.Private<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  public static final String NORMALIZER_TARGET_REGION_COUNT =<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      "NORMALIZER_TARGET_REGION_COUNT";<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  private static final Bytes NORMALIZER_TARGET_REGION_COUNT_KEY =<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      new Bytes(Bytes.toBytes(NORMALIZER_TARGET_REGION_COUNT));<a name="line.157"></a>
 <span class="sourceLineNo">158</span><a name="line.158"></a>
 <span class="sourceLineNo">159</span>  @InterfaceAudience.Private<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  public static final String PRIORITY = "PRIORITY";<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  private static final Bytes PRIORITY_KEY<a name="line.161"></a>
-<span class="sourceLineNo">162</span>          = new Bytes(Bytes.toBytes(PRIORITY));<a name="line.162"></a>
+<span class="sourceLineNo">160</span>  public static final String NORMALIZER_TARGET_REGION_SIZE = "NORMALIZER_TARGET_REGION_SIZE";<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  private static final Bytes NORMALIZER_TARGET_REGION_SIZE_KEY =<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      new Bytes(Bytes.toBytes(NORMALIZER_TARGET_REGION_SIZE));<a name="line.162"></a>
 <span class="sourceLineNo">163</span><a name="line.163"></a>
 <span class="sourceLineNo">164</span>  /**<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * Relative priority of the table used for rpc scheduling<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   */<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  private static final int DEFAULT_PRIORITY = HConstants.NORMAL_QOS;<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>  /**<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * Constant that denotes whether the table is READONLY by default and is false<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   */<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  public static final boolean DEFAULT_READONLY = false;<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>  /**<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * Constant that denotes whether the table is compaction enabled by default<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  public static final boolean DEFAULT_COMPACTION_ENABLED = true;<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  /**<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * Constant that denotes whether the table is normalized by default.<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   */<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  public static final boolean DEFAULT_NORMALIZATION_ENABLED = false;<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  /**<a name="line.184"></a>
-<span class="sourceLineNo">185</span>   * Constant that denotes the maximum default size of the memstore in bytes after which<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   * the contents are flushed to the store files.<a name="line.186"></a>
+<span class="sourceLineNo">165</span>   * Default durability for HTD is USE_DEFAULT, which defaults to HBase-global<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * default value<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  private static final Durability DEFAULT_DURABLITY = Durability.USE_DEFAULT;<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  @InterfaceAudience.Private<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  public static final String PRIORITY = "PRIORITY";<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  private static final Bytes PRIORITY_KEY<a name="line.172"></a>
+<span class="sourceLineNo">173</span>          = new Bytes(Bytes.toBytes(PRIORITY));<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>  /**<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   * Relative priority of the table used for rpc scheduling<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   */<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  private static final int DEFAULT_PRIORITY = HConstants.NORMAL_QOS;<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span>  /**<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * Constant that denotes whether the table is READONLY by default and is false<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   */<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  public static final boolean DEFAULT_READONLY = false;<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  /**<a name="line.185"></a>
+<span class="sourceLineNo">186</span>   * Constant that denotes whether the table is compaction enabled by default<a name="line.186"></a>
 <span class="sourceLineNo">187</span>   */<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  public static final long DEFAULT_MEMSTORE_FLUSH_SIZE = 1024 * 1024 * 128L;<a name="line.188"></a>
+<span class="sourceLineNo">188</span>  public static final boolean DEFAULT_COMPACTION_ENABLED = true;<a name="line.188"></a>
 <span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  public static final int DEFAULT_REGION_REPLICATION = 1;<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span>  public static final boolean DEFAULT_REGION_MEMSTORE_REPLICATION = true;<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>  private final static Map&lt;String, String&gt; DEFAULT_VALUES = new HashMap&lt;&gt;();<a name="line.194"></a>
-<span class="sourceLineNo">195</span>  private final static Set&lt;Bytes&gt; RESERVED_KEYWORDS = new HashSet&lt;&gt;();<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>  static {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    DEFAULT_VALUES.put(MAX_FILESIZE,<a name="line.198"></a>
-<span class="sourceLineNo">199</span>            String.valueOf(HConstants.DEFAULT_MAX_FILE_SIZE));<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    DEFAULT_VALUES.put(READONLY, String.valueOf(DEFAULT_READONLY));<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    DEFAULT_VALUES.put(MEMSTORE_FLUSHSIZE,<a name="line.201"></a>
-<span class="sourceLineNo">202</span>            String.valueOf(DEFAULT_MEMSTORE_FLUSH_SIZE));<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    DEFAULT_VALUES.put(DURABILITY, DEFAULT_DURABLITY.name()); //use the enum name<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    DEFAULT_VALUES.put(REGION_REPLICATION, String.valueOf(DEFAULT_REGION_REPLICATION));<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    DEFAULT_VALUES.put(NORMALIZATION_ENABLED, String.valueOf(DEFAULT_NORMALIZATION_ENABLED));<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    DEFAULT_VALUES.put(PRIORITY, String.valueOf(DEFAULT_PRIORITY));<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    DEFAULT_VALUES.keySet().stream()<a name="line.207"></a>
-<span class="sourceLineNo">208</span>            .map(s -&gt; new Bytes(Bytes.toBytes(s))).forEach(RESERVED_KEYWORDS::add);<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    RESERVED_KEYWORDS.add(IS_META_KEY);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  }<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>  @InterfaceAudience.Private<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  public final static String NAMESPACE_FAMILY_INFO = "info";<a name="line.213"></a>
-<span class="sourceLineNo">214</span>  @InterfaceAudience.Private<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  public final static byte[] NAMESPACE_FAMILY_INFO_BYTES = Bytes.toBytes(NAMESPACE_FAMILY_INFO);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  @InterfaceAudience.Private<a name="line.216"></a>
-<span class="sourceLineNo">217</span>  public final static byte[] NAMESPACE_COL_DESC_BYTES = Bytes.toBytes("d");<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span>  /**<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * &lt;pre&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * Pattern that matches a coprocessor specification. Form is:<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * {@code &lt;coprocessor jar file location&gt; '|' &lt;class name&gt; ['|' &lt;priority&gt; ['|' &lt;arguments&gt;]]}<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * where arguments are {@code &lt;KEY&gt; '=' &lt;VALUE&gt; [,...]}<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * For example: {@code hdfs:///foo.jar|com.foo.FooRegionObserver|1001|arg1=1,arg2=2}<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * &lt;/pre&gt;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   */<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  private static final Pattern CP_HTD_ATTR_VALUE_PATTERN =<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    Pattern.compile("(^[^\\|]*)\\|([^\\|]+)\\|[\\s]*([\\d]*)[\\s]*(\\|.*)?$");<a name="line.228"></a>
+<span class="sourceLineNo">190</span>  /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * Constant that denotes whether the table is normalized by default.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  public static final boolean DEFAULT_NORMALIZATION_ENABLED = false;<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>  /**<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   * Constant that denotes the maximum default size of the memstore in bytes after which<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * the contents are flushed to the store files.<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   */<a name="line.198"></a>
+<span class="sourceLineNo">199</span>  public static final long DEFAULT_MEMSTORE_FLUSH_SIZE = 1024 * 1024 * 128L;<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  public static final int DEFAULT_REGION_REPLICATION = 1;<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>  public static final boolean DEFAULT_REGION_MEMSTORE_REPLICATION = true;<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>  private final static Map&lt;String, String&gt; DEFAULT_VALUES = new HashMap&lt;&gt;();<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  private final static Set&lt;Bytes&gt; RESERVED_KEYWORDS = new HashSet&lt;&gt;();<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>  static {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    DEFAULT_VALUES.put(MAX_FILESIZE,<a name="line.209"></a>
+<span class="sourceLineNo">210</span>            String.valueOf(HConstants.DEFAULT_MAX_FILE_SIZE));<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    DEFAULT_VALUES.put(READONLY, String.valueOf(DEFAULT_READONLY));<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    DEFAULT_VALUES.put(MEMSTORE_FLUSHSIZE,<a name="line.212"></a>
+<span class="sourceLineNo">213</span>            String.valueOf(DEFAULT_MEMSTORE_FLUSH_SIZE));<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    DEFAULT_VALUES.put(DURABILITY, DEFAULT_DURABLITY.name()); //use the enum name<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    DEFAULT_VALUES.put(REGION_REPLICATION, String.valueOf(DEFAULT_REGION_REPLICATION));<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    DEFAULT_VALUES.put(NORMALIZATION_ENABLED, String.valueOf(DEFAULT_NORMALIZATION_ENABLED));<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    DEFAULT_VALUES.put(PRIORITY, String.valueOf(DEFAULT_PRIORITY));<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    DEFAULT_VALUES.keySet().stream()<a name="line.218"></a>
+<span class="sourceLineNo">219</span>            .map(s -&gt; new Bytes(Bytes.toBytes(s))).forEach(RESERVED_KEYWORDS::add);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    RESERVED_KEYWORDS.add(IS_META_KEY);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span>  @InterfaceAudience.Private<a name="line.223"></a>
+<span class="sourceLineNo">224</span>  public final static String NAMESPACE_FAMILY_INFO = "info";<a name="line.224"></a>
+<span class="sourceLineNo">225</span>  @InterfaceAudience.Private<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  public final static byte[] NAMESPACE_FAMILY_INFO_BYTES = Bytes.toBytes(NAMESPACE_FAMILY_INFO);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  @InterfaceAudience.Private<a name="line.227"></a>
+<span class="sourceLineNo">228</span>  public final static byte[] NAMESPACE_COL_DESC_BYTES = Bytes.toBytes("d");<a name="line.228"></a>
 <span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>  private static final String CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN = "[^=,]+";<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  private static final String CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN = "[^,]+";<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  private static final Pattern CP_HTD_ATTR_VALUE_PARAM_PATTERN = Pattern.compile(<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    "(" + CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN + ")=(" +<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN + "),?");<a name="line.234"></a>
-<span class="sourceLineNo">235</span>  private static final Pattern CP_HTD_ATTR_KEY_PATTERN =<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    Pattern.compile("^coprocessor\\$([0-9]+)$", Pattern.CASE_INSENSITIVE);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  /**<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * Table descriptor for namespace table<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   */<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  // TODO We used to set CacheDataInL1 for NS table. When we have BucketCache in file mode, now the<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  // NS data goes to File mode BC only. Test how that affect the system. If too much, we have to<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  // rethink about adding back the setCacheDataInL1 for NS table.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public static final TableDescriptor NAMESPACE_TABLEDESC<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    = TableDescriptorBuilder.newBuilder(TableName.NAMESPACE_TABLE_NAME)<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      .setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(NAMESPACE_FAMILY_INFO_BYTES)<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        // Ten is arbitrary number.  Keep versions to help debugging.<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        .setMaxVersions(10)<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        .setInMemory(true)<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        .setBlocksize(8 * 1024)<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        .setScope(HConstants.REPLICATION_SCOPE_LOCAL)<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        .build())<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      .build();<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  private final ModifyableTableDescriptor desc;<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>  /**<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   * @param desc The table descriptor to serialize<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * @return This instance serialized with pb with pb magic prefix<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  public static byte[] toByteArray(TableDescriptor desc) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (desc instanceof ModifyableTableDescriptor) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      return ((ModifyableTableDescriptor) desc).toByteArray();<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    return new ModifyableTableDescriptor(desc).toByteArray();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
+<span class="sourceLineNo">230</span>  /**<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * &lt;pre&gt;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * Pattern that matches a coprocessor specification. Form is:<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * {@code &lt;coprocessor jar file location&gt; '|' &lt;class name&gt; ['|' &lt;priority&gt; ['|' &lt;arguments&gt;]]}<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   * where arguments are {@code &lt;KEY&gt; '=' &lt;VALUE&gt; [,...]}<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   * For example: {@code hdfs:///foo.jar|com.foo.FooRegionObserver|1001|arg1=1,arg2=2}<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * &lt;/pre&gt;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   */<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  private static final Pattern CP_HTD_ATTR_VALUE_PATTERN =<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    Pattern.compile("(^[^\\|]*)\\|([^\\|]+)\\|[\\s]*([\\d]*)[\\s]*(\\|.*)?$");<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>  private static final String CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN = "[^=,]+";<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  private static final String CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN = "[^,]+";<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  private static final Pattern CP_HTD_ATTR_VALUE_PARAM_PATTERN = Pattern.compile(<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    "(" + CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN + ")=(" +<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN + "),?");<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  private static final Pattern CP_HTD_ATTR_KEY_PATTERN =<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    Pattern.compile("^coprocessor\\$([0-9]+)$", Pattern.CASE_INSENSITIVE);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  /**<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * Table descriptor for namespace table<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   */<a name="line.250"></a>
+<span class="sourceLineNo">251</span>  // TODO We used to set CacheDataInL1 for NS table. When we have BucketCache in file mode, now the<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  // NS data goes to File mode BC only. Test how that affect the system. If too much, we have to<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  // rethink about adding back the setCacheDataInL1 for NS table.<a name="line.253"></a>
+<span class="sourceLineNo">254</span>  public static final TableDescriptor NAMESPACE_TABLEDESC<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    = TableDescriptorBuilder.newBuilder(TableName.NAMESPACE_TABLE_NAME)<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      .setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(NAMESPACE_FAMILY_INFO_BYTES)<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        // Ten is arbitrary number.  Keep versions to help debugging.<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        .setMaxVersions(10)<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        .setInMemory(true)<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        .setBlocksize(8 * 1024)<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        .setScope(HConstants.REPLICATION_SCOPE_LOCAL)<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        .build())<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      .build();<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  private final ModifyableTableDescriptor desc;<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>   * The input should be created by {@link #toByteArray}.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * @param pbBytes A pb serialized TableDescriptor instance with pb magic prefix<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   * @return This instance serialized with pb with pb magic prefix<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * @throws org.apache.hadoop.hbase.exceptions.DeserializationException<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   */<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  public static TableDescriptor parseFrom(byte[] pbBytes) throws DeserializationException {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    return ModifyableTableDescriptor.parseFrom(pbBytes);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public static TableDescriptorBuilder newBuilder(final TableName name) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    return new TableDescriptorBuilder(name);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  public static TableDescriptor copy(TableDescriptor desc) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    return new ModifyableTableDescriptor(desc);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>  public static TableDescriptor copy(TableName name, TableDescriptor desc) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    return new ModifyableTableDescriptor(name, desc);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span>  /**<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * Copy all values, families, and name from the input.<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * @param desc The desciptor to copy<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   * @return A clone of input<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   */<a name="line.292"></a>
-<span class="sourceLineNo">293</span>  public static TableDescriptorBuilder newBuilder(final TableDescriptor desc) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    return new TableDescriptorBuilder(desc);<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>  private TableDescriptorBuilder(final TableName name) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    this.desc = new ModifyableTableDescriptor(name);<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>  private TableDescriptorBuilder(final TableDescriptor desc) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    this.desc = new ModifyableTableDescriptor(desc);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>  public TableDescriptorBuilder setCoprocessor(String className) throws IOException {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    return setCoprocessor(CoprocessorDescriptorBuilder.of(className));<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>  public TableDescriptorBuilder setCoprocessor(CoprocessorDescriptor cpDesc) throws IOException {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    desc.setCoprocessor(Objects.requireNonNull(cpDesc));<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    return this;<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>  public TableDescriptorBuilder setCoprocessors(Collection&lt;CoprocessorDescriptor&gt; cpDescs)<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    throws IOException {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    for (CoprocessorDescriptor cpDesc : cpDescs) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      desc.setCoprocessor(cpDesc);<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    return this;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  public TableDescriptorBuilder setColumnFamily(final ColumnFamilyDescriptor family) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    desc.setColumnFamily(Objects.requireNonNull(family));<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    return this;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  }<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span>  public TableDescriptorBuilder setColumnFamilies(<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    final Collection&lt;ColumnFamilyDescriptor&gt; families) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    families.forEach(desc::setColumnFamily);<a name="line.329"></a>
+<span class="sourceLineNo">267</span>   * @param desc The table descriptor to serialize<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   * @return This instance serialized with pb with pb magic prefix<a name="line.268"></a>
+<span class="sourceLineNo">269</span>   */<a name="line.269"></a>
+<span class="sourceLineNo">270</span>  public static byte[] toByteArray(TableDescriptor desc) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    if (desc instanceof ModifyableTableDescriptor) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      return ((ModifyableTableDescriptor) desc).toByteArray();<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    return new ModifyableTableDescriptor(desc).toByteArray();<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  }<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>  /**<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   * The input should be created by {@link #toByteArray}.<a name="line.278"></a>
+<span class="sourceLineNo">279</span>   * @param pbBytes A pb serialized TableDescriptor instance with pb magic prefix<a name="line.279"></a>
+<span class="sourceLineNo">280</span>   * @return This instance serialized with pb with pb magic prefix<a name="line.280"></a>
+<span class="sourceLineNo">281</span>   * @throws org.apache.hadoop.hbase.exceptions.DeserializationException<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   */<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public static TableDescriptor parseFrom(byte[] pbBytes) throws DeserializationException {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    return ModifyableTableDescriptor.parseFrom(pbBytes);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  }<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span>  public static TableDescriptorBuilder newBuilder(final TableName name) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    return new TableDescriptorBuilder(name);<a name="line.288"></a>
+<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span>  public static TableDescriptor copy(TableDescriptor desc) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    return new ModifyableTableDescriptor(desc);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>  public static TableDescriptor copy(TableName name, TableDescriptor desc) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    return new ModifyableTableDescriptor(name, desc);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  /**<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * Copy all values, families, and name from the input.<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   * @param desc The desciptor to copy<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * @return A clone of input<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   */<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public static TableDescriptorBuilder newBuilder(final TableDescriptor desc) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    return new TableDescriptorBuilder(desc);<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>  private TableDescriptorBuilder(final TableName name) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    this.desc = new ModifyableTableDescriptor(name);<a name="line.309"></a>
+<span class="sourceLineNo">310</span>  }<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span>  private TableDescriptorBuilder(final TableDescriptor desc) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    this.desc = new ModifyableTableDescriptor(desc);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  }<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span>  public TableDescriptorBuilder setCoprocessor(String className) throws IOException {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    return setCoprocessor(CoprocessorDescriptorBuilder.of(className));<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  public TableDescriptorBuilder setCoprocessor(CoprocessorDescriptor cpDesc) throws IOException {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    desc.setCoprocessor(Objects.requireNonNull(cpDesc));<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    return this;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>  public TableDescriptorBuilder setCoprocessors(Collection&lt;CoprocessorDescriptor&gt; cpDescs)<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    throws IOException {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    for (CoprocessorDescriptor cpDesc : cpDescs) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      desc.setCoprocessor(cpDesc);<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    }<a name="line.329"></a>
 <span class="sourceLineNo">330</span>    return this;<a name="line.330"></a>
 <span class="sourceLineNo">331</span>  }<a name="line.331"></a>
 <span class="sourceLineNo">332</span><a name="line.332"></a>
-<span class="sourceLineNo">333</span>  public TableDescriptorBuilder modifyColumnFamily(final ColumnFamilyDescriptor family) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    desc.modifyColumnFamily(Objects.requireNonNull(family));<a name="line.334"></a>
+<span class="sourceLineNo">333</span>  public TableDescriptorBuilder setColumnFamily(final ColumnFamilyDescriptor family) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    desc.setColumnFamily(Objects.requireNonNull(family));<a name="line.334"></a>
 <span class="sourceLineNo">335</span>    return this;<a name="line.335"></a>
 <span class="sourceLineNo">336</span>  }<a name="line.336"></a>
 <span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>  public TableDescriptorBuilder removeValue(Bytes key) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    desc.removeValue(key);<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    return this;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>  }<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>  public TableDescriptorBuilder removeValue(byte[] key) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    desc.removeValue(key);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    return this;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>  }<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>  public TableDescriptorBuilder removeColumnFamily(final byte[] name) {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    desc.removeColumnFamily(name);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    return this;<a name="line.350"></a>
-<span class="sourceLineNo">351</span>  }<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span>  public TableDescriptorBuilder removeCoprocessor(String className) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    desc.removeCoprocessor(className);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    return this;<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>  public TableDescriptorBuilder setCompactionEnabled(final boolean isEnable) {<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    desc.setCompactionEnabled(isEnable);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return this;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  public TableDescriptorBuilder setDurability(Durability durability) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    desc.setDurability(durability);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    return this;<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>  public TableDescriptorBuilder setFlushPolicyClassName(String clazz) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    desc.setFlushPolicyClassName(clazz);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return this;<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  }<a name="line.371"></a>
-<span class="sourceLineNo">372</span><a name="line.372"></a>
-<span class="sourceLineNo">373</span>  public TableDescriptorBuilder setMaxFileSize(long maxFileSize) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    desc.setMaxFileSize(maxFileSize);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    return this;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  public TableDescriptorBuilder setMemStoreFlushSize(long memstoreFlushSize) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    desc.setMemStoreFlushSize(memstoreFlushSize);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    return this;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  public TableDescriptorBuilder setNormalizationEnabled(final boolean isEnable) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    desc.setNormalizationEnabled(isEnable);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    return this;<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>  @Deprecated<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  public TableDescriptorBuilder setOwner(User owner) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    desc.setOwner(owner);<a name="line.390"></a>
+<span class="sourceLineNo">338</span>  public TableDescriptorBuilder setColumnFamilies(<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    final Collection&lt;ColumnFamilyDescriptor&gt; families) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    families.forEach(desc::setColumnFamily);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    return this;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>  }<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>  public TableDescriptorBuilder modifyColumnFamily(final ColumnFamilyDescriptor family) {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    desc.modifyColumnFamily(Objects.requireNonNull(family));<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    return this;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span>  public TableDescriptorBuilder removeValue(Bytes key) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    desc.removeValue(key);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    return this;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  public TableDescriptorBuilder removeValue(byte[] key) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    desc.removeValue(key);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    return this;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>  public TableDescriptorBuilder removeColumnFamily(final byte[] name) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    desc.removeColumnFamily(name);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    return this;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>  }<a name="line.362"></a>
+<span class="sourceLineNo">363</span><a name="line.363"></a>
+<span class="sourceLineNo">364</span>  public TableDescriptorBuilder removeCoprocessor(String className) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    desc.removeCoprocessor(className);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    return this;<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>  public TableDescriptorBuilder setCompactionEnabled(final boolean isEnable) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    desc.setCompactionEnabled(isEnable);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    return this;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>  }<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span>  public TableDescriptorBuilder setDurability(Durability durability) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    desc.setDurability(durability);<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    return this;<a name="line.376"></a>
+<span class="sourceLineNo">377</span>  }<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span>  public TableDescriptorBuilder setFlushPolicyClassName(String clazz) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    desc.setFlushPolicyClassName(clazz);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    return this;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
+<span class="sourceLineNo">383</span><a name="line.383"></a>
+<span class="sourceLineNo">384</span>  public TableDescriptorBuilder setMaxFileSize(long maxFileSize) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    desc.setMaxFileSize(maxFileSize);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    return this;<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>  public TableDescriptorBuilder setMemStoreFlushSize(long memstoreFlushSize) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    desc.setMemStoreFlushSize(memstoreFlushSize);<a name="line.390"></a>
 <span class="sourceLineNo">391</span>    return this;<a name="line.391"></a>
 <span class="sourceLineNo">392</span>  }<a name="line.392"></a>
 <span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>  @Deprecated<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  public TableDescriptorBuilder setOwnerString(String ownerString) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    desc.setOwnerString(ownerString);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    return this;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  }<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span>  public TableDescriptorBuilder setPriority(int priority) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    desc.setPriority(priority);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    return this;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
-<span class="sourceLineNo">404</span><a name="line.404"></a>
-<span class="sourceLineNo">405</span>  public TableDescriptorBuilder setReadOnly(final boolean readOnly) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    desc.setReadOnly(readOnly);<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    return this;<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>  public TableDescriptorBuilder setRegionMemStoreReplication(boolean memstoreReplication) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    desc.setRegionMemStoreReplication(memstoreReplication);<a name="line.411"></a>
+<span class="sourceLineNo">394</span>  public TableDescriptorBuilder setNormalizerTargetRegionCount(final int regionCount) {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    desc.setNormalizerTargetRegionCount(regionCount);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    return this;<a name="line.396"></a>
+<span class="sourceLineNo">397</span>  }<a name="line.397"></a>
+<span class="sourceLineNo">398</span><a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public TableDescriptorBuilder setNormalizerTargetRegionSize(final long regionSize) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    desc.setNormalizerTargetRegionSize(regionSize);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    return this;<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  public TableDescriptorBuilder setNormalizationEnabled(final boolean isEnable) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    desc.setNormalizationEnabled(isEnable);<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    return this;<a name="line.406"></a>
+<span class="sourceLineNo">407</span>  }<a name="line.407"></a>
+<span class="sourceLineNo">408</span><a name="line.408"></a>
+<span class="sourceLineNo">409</span>  @Deprecated<a name="line.409"></a>
+<span class="sourceLineNo">410</span>  public TableDescriptorBuilder setOwner(User owner) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    desc.setOwner(owner);<a name="line.411"></a>
 <span class="sourceLineNo">412</span>    return this;<a name="line.412"></a>
 <span class="sourceLineNo">413</span>  }<a name="line.413"></a>
 <span class="sourceLineNo">414</span><a name="line.414"></a>
-<span class="sourceLineNo">415</span>  public TableDescriptorBuilder setRegionReplication(int regionReplication) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    desc.setRegionReplication(regionReplication);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    return this;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  }<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span>  public TableDescriptorBuilder setRegionSplitPolicyClassName(String clazz) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    desc.setRegionSplitPolicyClassName(clazz);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    return this;<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>  public TableDescriptorBuilder setValue(final String key, final String value) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    desc.setValue(key, value);<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    return this;<a name="line.427"></a>
-<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span>  public TableDescriptorBuilder setValue(final Bytes key, final Bytes value) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    desc.setValue(key, value);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    return this;<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>  public TableDescriptorBuilder setValue(final byte[] key, final byte[] value) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    desc.setValue(key, value);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    return this;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  /**<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   * Sets replication scope all &amp; only the columns already in the builder. Columns added later won't<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * be backfilled with replication scope.<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   * @param scope replication scope<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * @return a TableDescriptorBuilder<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   */<a name="line.445"></a>
-<span class="sourceLineNo">446</span>  public TableDescriptorBuilder setReplicationScope(int scope) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    Map&lt;byte[], ColumnFamilyDescriptor&gt; newFamilies = new TreeMap&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    newFamilies.putAll(desc.families);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    newFamilies<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        .forEach((cf, cfDesc) -&gt; {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>          desc.removeColumnFamily(cf);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          desc.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(cfDesc).setScope(scope)<a name="line.452"></a>
-<span class="sourceLineNo">453</span>              .build());<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        });<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    return this;<a name="line.455"></a>
-<span class="sourceLineNo">456</span>  }<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span>  public TableDescriptor build() {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    return new ModifyableTableDescriptor(desc);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>  }<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span>  /**<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * TODO: make this private after removing the HTableDescriptor<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   */<a name="line.464"></a>
-<span class="sourceLineNo">465</span>  @InterfaceAudience.Private<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  public static class ModifyableTableDescriptor<a name="line.466"></a>
-<span class="sourceLineNo">467</span>          implements TableDescriptor, Comparable&lt;ModifyableTableDescriptor&gt; {<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>    private final TableName name;<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 map which holds the metadata information of the table. This metadata<a name="line.472"></a>
-<span class="sourceLineNo">473</span>     * includes values like IS_META, SPLIT_POLICY, MAX_FILE_SIZE,<a name="line.473"></a>
-<span class="sourceLineNo">474</span>     * READONLY, MEMSTORE_FLUSHSIZE etc...<a name="line.474"></a>
-<span class="sourceLineNo">475</span>     */<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    private final Map&lt;Bytes, Bytes&gt; values = new HashMap&lt;&gt;();<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>     * Maps column family name to the respective FamilyDescriptors<a name="line.479"></a>
-<span class="sourceLineNo">480</span>     */<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    private final Map&lt;byte[], ColumnFamilyDescriptor&gt; families<a name="line.481"></a>
-<span class="sourceLineNo">482</span>            = new TreeMap&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>    /**<a name="line.484"></a>
-<span class="sourceLineNo">485</span>     * Construct a table descriptor specifying a TableName object<a name="line.485"></a>
-<span class="sourceLineNo">486</span>     *<a name="line.486"></a>
-<span class="sourceLineNo">487</span>     * @param name Table name.<a name="line.487"></a>
-<span class="sourceLineNo">488</span>     * TODO: make this private after removing the HTableDescriptor<a name="line.488"></a>
-<span class="sourceLineNo">489</span>     */<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    @InterfaceAudience.Private<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    public ModifyableTableDescriptor(final TableName name) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      this(name, Collections.EMPTY_LIST, Collections.EMPTY_MAP);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>    private ModifyableTableDescriptor(final TableDescriptor desc) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      this(desc.getTableName(), Arrays.asList(desc.getColumnFamilies()), desc.getValues());<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
+<span class="sourceLineNo">415</span>  @Deprecated<a name="line.415"></a>
+<span class="sourceLineNo">416</span>  public TableDescriptorBuilder setOwnerString(String ownerString) {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    desc.setOwnerString(ownerString);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    return this;<a name="line.418"></a>
+<span class="sourceLineNo">419</span>  }<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span>  public TableDescriptorBuilder setPriority(int priority) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    desc.setPriority(priority);<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    return this;<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  }<a name="line.424"></a>
+<span class="sourceLineNo">425</span><a name="line.425"></a>
+<span class="sourceLineNo">426</span>  public TableDescriptorBuilder setReadOnly(final boolean readOnly) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    desc.setReadOnly(readOnly);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    return this;<a name="line.428"></a>
+<span class="sourceLineNo">429</span>  }<a name="line.429"></a>
+<span class="sourceLineNo">430</span><a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public TableDescriptorBuilder setRegionMemStoreReplication(boolean memstoreReplication) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    desc.setRegionMemStoreReplication(memstoreReplication);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    return this;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>  }<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>  public TableDescriptorBuilder setRegionReplication(int regionReplication) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    desc.setRegionReplication(regionReplication);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    return this;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  }<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>  public TableDescriptorBuilder setRegionSplitPolicyClassName(String clazz) {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    desc.setRegionSplitPolicyClassName(clazz);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    return this;<a name="line.443"></a>
+<span class="sourceLineNo">444</span>  }<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span>  public TableDescriptorBuilder setValue(final String key, final String value) {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    desc.setValue(key, value);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    return this;<a name="line.448"></a>
+<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
+<span class="sourceLineNo">450</span><a name="line.450"></a>
+<span class="sourceLineNo">451</span>  public TableDescriptorBuilder setValue(final Bytes key, final Bytes value) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    desc.setValue(key, value);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    return this;<a name="line.453"></a>
+<span class="sourceLineNo">454</span>  }<a name="line.454"></a>
+<span class="sourceLineNo">455</span><a name="line.455"></a>
+<span class="sourceLineNo">456</span>  public TableDescriptorBuilder setValue(final byte[] key, final byte[] value) {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    desc.setValue(key, value);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    return this;<a name="line.458"></a>
+<span class="sourceLineNo">459</span>  }<a name="line.459"></a>
+<span class="sourceLineNo">460</span><a name="line.460"></a>
+<span class="sourceLineNo">461</span>  /**<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * Sets replication scope all &amp; only the columns already in the builder. Columns added later won't<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * be backfilled with replication scope.<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   * @param scope replication scope<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * @return a TableDescriptorBuilder<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   */<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  public TableDescriptorBuilder setReplicationScope(int scope) {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    Map&lt;byte[], ColumnFamilyDescriptor&gt; newFamilies = new TreeMap&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    newFamilies.putAll(desc.families);<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    newFamilies<a name="line.470"></a>
+<span class="sourceLineNo">471</span>        .forEach((cf, cfDesc) -&gt; {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>          desc.removeColumnFamily(cf);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>          desc.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(cfDesc).setScope(scope)<a name="line.473"></a>
+<span class="sourceLineNo">474</span>              .build());<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        });<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    return this;<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>  public TableDescriptor build() {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    return new ModifyableTableDescriptor(desc);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>  }<a name="line.481"></a>
+<span class="sourceLineNo">482</span><a name="line.482"></a>
+<span class="sourceLineNo">483</span>  /**<a name="line.483"></a>
+<span class="sourceLineNo">484</span>   * TODO: make this private after removing the HTableDescriptor<a name="line.484"></a>
+<span class="sourceLineNo">485</span>   */<a name="line.485"></a>
+<span class="sourceLineNo">486</span>  @InterfaceAudience.Private<a name="line.486"></a>
+<span class="sourceLineNo">487</span>  public static class ModifyableTableDescriptor<a name="line.487"></a>
+<span class="sourceLineNo">488</span>          implements TableDescriptor, Comparable&lt;ModifyableTableDescriptor&gt; {<a name="line.488"></a>
+<span class="sourceLineNo">489</span><a name="line.489"></a>
+<span class="sourceLineNo">490</span>    private final TableName name;<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span>    /**<a name="line.492"></a>
+<span class="sourceLineNo">493</span>     * A map which holds the metadata information of the table. This metadata<a name="line.493"></a>
+<span class="sourceLineNo">494</span>     * includes values like IS_META, SPLIT_POLICY, MAX_FILE_SIZE,<a name="line.494"></a>
+<span class="sourceLineNo">495</span>     * READONLY, MEMSTORE_FLUSHSIZE etc...<a name="line.495"></a>
+<span class="sourceLineNo">496</span>     */<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    private final Map&lt;Bytes, Bytes&gt; values = new HashMap&lt;&gt;();<a name="line.497"></a>
 <span class="sourceLineNo">498</span><a name="line.498"></a>
 <span class="sourceLineNo">499</span>    /**<a name="line.499"></a>
-<span class="sourceLineNo">500</span>     * Construct a table descriptor by cloning the descriptor passed as a<a name="line.500"></a>
-<span class="sourceLineNo">501</span>     * parameter.<a name="line.501"></a>
-<span class="sourceLineNo">502</span>     * &lt;p&gt;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>     * Makes a deep copy of the supplied descriptor.<a name="line.503"></a>
-<span class="sourceLineNo">504</span>     * @param name The new name<a name="line.504"></a>
-<span class="sourceLineNo">505</span>     * @param desc The descriptor.<a name="line.505"></a>
-<span class="sourceLineNo">506</span>     * TODO: make this private after removing the HTableDescriptor<a name="line.506"></a>
-<span class="sourceLineNo">507</span>     */<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    @InterfaceAudience.Private<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    @Deprecated // only used by HTableDescriptor. remove this method if HTD is removed<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    public ModifyableTableDescriptor(final TableName name, final TableDescriptor desc) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      this(name, Arrays.asList(desc.getColumnFamilies()), desc.getValues());<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>    private ModifyableTableDescriptor(final TableName name, final Collection&lt;ColumnFamilyDescriptor&gt; families,<a name="line.514"></a>
-<span class="sourceLineNo">515</span>            Map&lt;Bytes, Bytes&gt; values) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      this.name = name;<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      families.forEach(c -&gt; this.families.put(c.getName(), ColumnFamilyDescriptorBuilder.copy(c)));<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      this.values.putAll(values);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      this.values.put(IS_META_KEY,<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        new Bytes(Bytes.toBytes(Boolean.toString(name.equals(TableName.META_TABLE_NAME)))));<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    }<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    /**<a name="line.523"></a>
-<span class="sourceLineNo">524</span>     * Checks if this table is &lt;code&gt; hbase:meta &lt;/code&gt; region.<a name="line.524"></a>
-<span class="sourceLineNo">525</span>     *<a name="line.525"></a>
-<span class="sourceLineNo">526</span>     * @return true if this table is &lt;code&gt; hbase:meta &lt;/code&gt; region<a name="line.526"></a>
-<span class="sourceLineNo">527</span>     */<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    @Override<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    public boolean isMetaRegion() {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      return getOrDefault(IS_META_KEY, Boolean::valueOf, false);<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>    /**<a name="line.533"></a>
-<span class="sourceLineNo">534</span>     * Checks if the table is a &lt;code&gt;hbase:meta&lt;/code&gt; table<a name="line.534"></a>
-<span class="sourceLineNo">535</span>     *<a name="line.535"></a>
-<span class="sourceLineNo">536</span>     * @return true if table is &lt;code&gt; hbase:meta &lt;/code&gt; region.<a name="line.536"></a>
-<span class="sourceLineNo">537</span>     */<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    @Override<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    public boolean isMetaTable() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return isMetaRegion();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>    @Override<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    public Bytes getValue(Bytes key) {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      Bytes rval = values.get(key);<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      return rval == null ? null : new Bytes(rval.copyBytes());<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
+<span class="sourceLineNo">500</span>     * Maps column family name to the respective FamilyDescriptors<a name="line.500"></a>
+<span class="sourceLineNo">501</span>     */<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    private final Map&lt;byte[], ColumnFamilyDescriptor&gt; families<a name="line.502"></a>
+<span class="sourceLineNo">503</span>            = new TreeMap&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.503"></a>
+<span class="sourceLineNo">504</span><a name="line.504"></a>
+<span class="sourceLineNo">505</span>    /**<a name="line.505"></a>
+<span class="sourceLineNo">506</span>     * Construct a table descriptor specifying a TableName object<a name="line.506"></a>
+<span class="sourceLineNo">507</span>     *<a name="line.507"></a>
+<span class="sourceLineNo">508</span>     * @param name Table name.<a name="line.508"></a>
+<span class="sourceLineNo">509</span>     * TODO: make this private after removing the HTableDescriptor<a name="line.509"></a>
+<span class="sourceLineNo">510</span>     */<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    @InterfaceAudience.Private<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    public ModifyableTableDescriptor(final TableName name) {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>      this(name, Collections.EMPTY_LIST, Collections.EMPTY_MAP);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    }<a name="line.514"></a>
+<span class="sourceLineNo">515</span><a name="line.515"></a>
+<span class="sourceLineNo">516</span>    private ModifyableTableDescriptor(final TableDescriptor desc) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>      this(desc.getTableName(), Arrays.asList(desc.getColumnFamilies()), desc.getValues());<a name="line.517"></a>
+<span class="sourceLineNo">518</span>    }<a name="line.518"></a>
+<span class="sourceLineNo">519</span><a name="line.519"></a>
+<span class="sourceLineNo">520</span>    /**<a name="line.520"></a>
+<span class="sourceLineNo">521</span>     * Construct a table descriptor by cloning the descriptor passed as a<a name="line.521"></a>
+<span class="sourceLineNo">522</span>     * parameter.<a name="line.522"></a>
+<span class="sourceLineNo">523</span>     * &lt;p&gt;<a name="line.523"></a>
+<span class="sourceLineNo">524</span>     * Makes a deep copy of the supplied descriptor.<a name="line.524"></a>
+<span class="sourceLineNo">525</span>     * @param name The new name<a name="line.525"></a>
+<span class="sourceLineNo">526</span>     * @param desc The descriptor.<a name="line.526"></a>
+<span class="sourceLineNo">527</span>     * TODO: make this private after removing the HTableDescriptor<a name="line.527"></a>
+<span class="sourceLineNo">528</span>     */<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    @InterfaceAudience.Private<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    @Deprecated // only used by HTableDescriptor. remove this method if HTD is removed<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    public ModifyableTableDescriptor(final TableName name, final TableDescriptor desc) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      this(name, Arrays.asList(desc.getColumnFamilies()), desc.getValues());<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>    private ModifyableTableDescriptor(final TableName name, final Collection&lt;ColumnFamilyDescriptor&gt; families,<a name="line.535"></a>
+<span class="sourceLineNo">536</span>            Map&lt;Bytes, Bytes&gt; values) {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      this.name = name;<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      families.forEach(c -&gt; this.families.put(c.getName(), ColumnFamilyDescriptorBuilder.copy(c)));<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      this.values.putAll(values);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>      this.values.put(IS_META_KEY,<a name="line.540"></a>
+<span class="sourceLineNo">541</span>        new Bytes(Bytes.toBytes(Boolean.toString(name.equals(TableName.META_TABLE_NAME)))));<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    }<a name="line.542"></a>
+<span class="sourceLineNo">543</span><a name="line.543"></a>
+<span class="sourceLineNo">544</span>    /**<a name="line.544"></a>
+<span class="sourceLineNo">545</span>     * Checks if this table is &lt;code&gt; hbase:meta &lt;/code&gt; region.<a name="line.545"></a>
+<span class="sourceLineNo">546</span>     *<a name="line.546"></a>
+<span class="sourceLineNo">547</span>     * @return true if this table is &lt;code&gt; hbase:meta &lt;/code&gt; region<a name="line.547"></a>
+<span class="sourceLineNo">548</span>     */<a name="line.548"></a>
 <span class="sourceLineNo">549</span>    @Override<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    public String getValue(String key) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      Bytes rval = values.get(new Bytes(Bytes.toBytes(key)));<a name="line.551"></a>
-<span class="sourceLineNo">552</span>      return rval == null ? null : Bytes.toString(rval.get(), rval.getOffset(), rval.getLength());<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
-<span class="sourceLineNo">554</span><a name="line.554"></a>
-<span class="sourceLineNo">555</span>    @Override<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    public byte[] getValue(byte[] key) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      Bytes value = values.get(new Bytes(key));<a name="line.557"></a>
-<span class="sourceLineNo">558</span>      return value == null ? null : value.copyBytes();<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    }<a name="line.559"></a>
-<span class="sourceLineNo">560</span><a name="line.560"></a>
-<span class="sourceLineNo">561</span>    private &lt;T&gt; T getOrDefault(Bytes key, Function&lt;String, T&gt; function, T defaultValue) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      Bytes value = values.get(key);<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      if (value == null) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>        return defaultValue;<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      } else {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>        return function.apply(Bytes.toString(value.get(), value.getOffset(), value.getLength()));<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      }<a name="line.567"></a>
+<span class="sourceLineNo">550</span>    public boolean isMetaRegion() {<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      return getOrDefault(IS_META_KEY, Boolean::valueOf, false);<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    }<a name="line.552"></a>
+<span class="sourceLineNo">553</span><a name="line.553"></a>
+<span class="sourceLineNo">554</span>    /**<a name="line.554"></a>
+<span class="sourceLineNo">555</span>     * Checks if the table is a &lt;code&gt;hbase:meta&lt;/code&gt; table<a name="line.555"></a>
+<span class="sourceLineNo">556</span>     *<a name="line.556"></a>
+<span class="sourceLineNo">557</span>     * @return true if table is &lt;code&gt; hbase:meta &lt;/code&gt; region.<a name="line.557"></a>
+<span class="sourceLineNo">558</span>     */<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    @Override<a name="line.559"></a>
+<span class="sourceLineNo">560</span>    public boolean isMetaTable() {<a name="line.560"></a>
+<span class="sourceLineNo">561</span>      return isMetaRegion();<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    }<a name="line.562"></a>
+<span class="sourceLineNo">563</span><a name="line.563"></a>
+<span class="sourceLineNo">564</span>    @Override<a name="line.564"></a>
+<span class="sourceLineNo">565</span>    public Bytes getValue(Bytes key) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      Bytes rval = values.get(key);<a name="line.566"></a>
+<span class="sourceLineNo">567</span>      return rval == null ? null : new Bytes(rval.copyBytes());<a name="line.567"></a>
 <span class="sourceLineNo">568</span>    }<a name="line.568"></a>
 <span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>    /**<a name="line.570"></a>
-<span class="sourceLineNo">571</span>     * Getter for fetching an unmodifiable {@link #values} map.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>     *<a name="line.572"></a>
-<span class="sourceLineNo">573</span>     * @return unmodifiable map {@link #values}.<a name="line.573"></a>
-<span class="sourceLineNo">574</span>     * @see #values<a name="line.574"></a>
-<span class="sourceLineNo">575</span>     */<a name="line.575"></a>
+<span class="sourceLineNo">570</span>    @Override<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    public String getValue(String key) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      Bytes rval = values.get(new Bytes(Bytes.toBytes(key)));<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      return rval == null ? null : Bytes.toString(rval.get(), rval.getOffset(), rval.getLength());<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>    @Override<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    public Map&lt;Bytes, Bytes&gt; getValues() {<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      // shallow pointer copy<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      return Collections.unmodifiableMap(values);<a name="line.579"></a>
+<span class="sourceLineNo">577</span>    public byte[] getValue(byte[] key) {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>      Bytes value = values.get(new Bytes(key));<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      return value == null ? null : value.copyBytes();<a name="line.579"></a>
 <span class="sourceLineNo">580</span>    }<a name="line.580"></a>
 <span class="sourceLineNo">581</span><a name="line.581"></a>
-<span class="sourceLineNo">582</span>    /**<a name="line.582"></a>
-<span class="sourceLineNo">583</span>     * Setter for storing metadata as a (key, value) pair in {@link #values} map<a name="line.583"></a>
-<span class="sourceLineNo">584</span>     *<a name="line.584"></a>
-<span class="sourceLineNo">585</span>     * @param key The key.<a name="line.585"></a>
-<span class="sourceLineNo">586</span>     * @param value The value. If null, removes the setting.<a name="line.586"></a>
-<span class="sourceLineNo">587</span>     * @return the modifyable TD<a name="line.587"></a>
-<span class="sourceLineNo">588</span>     * @see #values<a name="line.588"></a>
-<span class="sourceLineNo">589</span>     */<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    public ModifyableTableDescriptor setValue(byte[] key, byte[] value) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>      return setValue(toBytesOrNull(key, v -&gt; v),<a name="line.591"></a>
-<span class="sourceLineNo">592</span>              toBytesOrNull(value, v -&gt; v));<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>    public ModifyableTableDescriptor setValue(String key, String value) {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>      return setValue(toBytesOrNull(key, Bytes::toBytes),<a name="line.596"></a>
-<span class="sourceLineNo">597</span>              toBytesOrNull(value, Bytes::toBytes));<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    }<a name="line.598"></a>
-<span class="sourceLineNo">599</span><a name="line.599"></a>
-<span class="sourceLineNo">600</span>    /*<a name="line.600"></a>
-<span class="sourceLineNo">601</span>     * @param key The key.<a name="line.601"></a>
-<span class="sourceLineNo">602</span>     * @param value The value. If null, removes the setting.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>     */<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    private ModifyableTableDescriptor setValue(final Bytes key,<a name="line.604"></a>
-<span class="sourceLineNo">605</span>            final String value) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      return setValue(key, toBytesOrNull(value, Bytes::toBytes));<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    }<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>     * Setter for storing metadata as a (key, value) pair in {@link #values} map<a name="line.610"></a>
-<span class="sourceLineNo">611</span>     *<a name="line.611"></a>
-<span class="sourceLineNo">612</span>     * @param key The key.<a name="line.612"></a>
-<span class="sourceLineNo">613</span>     * @param value The value. If null, removes the setting.<a name="line.613"></a>
-<span class="sourceLineNo">614</span>     */<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    public ModifyableTableDescriptor setValue(final Bytes key, final Bytes value) {<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      if (value == null) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        values.remove(key);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      } else {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>        values.put(key, value);<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      }<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      return this;<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    }<a name="line.622"></a>
-<span class="sourceLineNo">623</span><a name="line.623"></a>
-<span class="sourceLineNo">624</span>    private static &lt;T&gt; Bytes toBytesOrNull(T t, Function&lt;T, byte[]&gt; f) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      if (t == null) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        return null;<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      } else {<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        return new Bytes(f.apply(t));<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      }<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    }<a name="line.630"></a>
-<span class="sourceLineNo">631</span><a name="line.631"></a>
-<span class="sourceLineNo">632</span>    /**<a name="line.632"></a>
-<span class="sourceLineNo">633</span>     * Remove metadata represented by the key from the {@link #values} map<a name="line.633"></a>
-<span class="sourceLineNo">634</span>     *<a name="line.634"></a>
-<span class="sourceLineNo">635</span>     * @param key Key whose key and value we're to remove from TableDescriptor<a name="line.635"></a>
-<span class="sourceLineNo">636</span>     * parameters.<a name="line.636"></a>
-<span class="sourceLineNo">637</span>     * @return the modifyable TD<a name="line.637"></a>
-<span class="sourceLineNo">638</span>     */<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    public ModifyableTableDescriptor removeValue(Bytes key) {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      return setValue(key, (Bytes) null);<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">643</span>    /**<a name="line.643"></a>
-<span class="sourceLineNo">644</span>     * Remove metadata represented by the key from the {@link #values} map<a name="line.644"></a>
-<span class="sourceLineNo">645</span>     *<a name="line.645"></a>
-<span class="sourceLineNo">646</span>     * @param key Key whose key and value we're to remove from TableDescriptor<a name="line.646"></a>
-<span class="sourceLineNo">647</span>     * parameters.<a name="line.647"></a>
-<span class="sourceLineNo">648</span>     * @return the modifyable TD<a name="line.648"></a>
-<span class="sourceLineNo">649</span>     */<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    public ModifyableTableDescriptor removeValue(final byte[] key) {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      return removeValue(new Bytes(key));<a name="line.651"></a>
-<span class="sourceLineNo">652</span>    }<a name="line.652"></a>
-<span class="sourceLineNo">653</span><a name="line.653"></a>
-<span class="sourceLineNo">654</span>    /**<a name="line.654"></a>
-<span class="sourceLineNo">655</span>     * Check if the readOnly flag of the table is set. If the readOnly flag is<a name="line.655"></a>
-<span class="sourceLineNo">656</span>     * set then the contents of the table can only be read from but not<a name="line.656"></a>
-<span class="sourceLineNo">657</span>     * modified.<a name="line.657"></a>
-<span class="sourceLineNo">658</span>     *<a name="line.658"></a>
-<span class="sourceLineNo">659</span>     * @return true if all columns in the table should be read only<a name="line.659"></a>
-<span class="sourceLineNo">660</span>     */<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    @Override<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    public boolean isReadOnly() {<a name="line.662"></a>
-<span class="sourceLineNo">663</span>      return getOrDefault(READONLY_KEY, Boolean::valueOf, DEFAULT_READONLY);<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    }<a name="line.664"></a>
-<span class="sourceLineNo">665</span><a name="line.665"></a>
-<span class="sourceLineNo">666</span>    /**<a name="line.666"></a>
-<span class="sourceLineNo">667</span>     * Setting the table as read only sets all the columns in the table as read<a name="line.667"></a>
-<span class="sourceLineNo">668</span>     * only. By default all tables are modifiable, but if the readOnly flag is<a name="line.668"></a>
-<span class="sourceLineNo">669</span>     * set to true then the contents of the table can only be read but not<a name="line.669"></a>
-<span class="sourceLineNo">670</span>     * modified.<a name="line.670"></a>
-<span class="sour

<TRUNCATED>

[25/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index d7acca3..5b28c1b 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -284,7 +284,7 @@
 <td>3703</td>
 <td>0</td>
 <td>0</td>
-<td>15560</td></tr></table></div>
+<td>15559</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -5637,7 +5637,7 @@
 <td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.java">org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>11</td></tr>
+<td>10</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureScheduler.java">org/apache/hadoop/hbase/procedure2/ProcedureScheduler.java</a></td>
 <td>0</td>
@@ -9809,7 +9809,7 @@
 <tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_coding.html#InnerAssignment">InnerAssignment</a></td>
-<td>91</td>
+<td>90</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td></td>
@@ -9883,12 +9883,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>770</td>
+<td>771</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>3619</td>
+<td>3618</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>misc</td>
@@ -13811,223 +13811,223 @@
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
-<td>70</td></tr>
+<td>74</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>71</td></tr>
+<td>75</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 108).</td>
-<td>72</td></tr>
+<td>76</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>73</td></tr>
+<td>77</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 127).</td>
-<td>74</td></tr>
+<td>78</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>137</td></tr>
+<td>141</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>199</td></tr>
+<td>203</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>209</td></tr>
+<td>213</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>219</td></tr>
+<td>223</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>242</td></tr>
+<td>246</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>345</td></tr>
+<td>369</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 3, expected level should be 2.</td>
-<td>361</td></tr>
+<td>385</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>379</td></tr>
+<td>403</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>463</td></tr>
+<td>487</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>473</td></tr>
+<td>497</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>483</td></tr>
+<td>507</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>533</td></tr>
+<td>557</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>annotation</td>
 <td>MissingDeprecated</td>
 <td>Must include both @java.lang.Deprecated annotation and @deprecated Javadoc tag with description.</td>
-<td>643</td></tr>
+<td>667</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>656</td></tr>
+<td>680</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>671</td></tr>
+<td>695</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>701</td></tr>
+<td>725</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>715</td></tr>
+<td>739</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>719</td></tr>
+<td>743</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>723</td></tr>
+<td>747</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>741</td></tr>
+<td>765</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 110).</td>
-<td>783</td></tr>
+<td>807</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 104).</td>
-<td>784</td></tr>
+<td>808</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>annotation</td>
 <td>MissingDeprecated</td>
 <td>Must include both @java.lang.Deprecated annotation and @deprecated Javadoc tag with description.</td>
-<td>790</td></tr>
+<td>814</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>annotation</td>
 <td>MissingDeprecated</td>
 <td>Must include both @java.lang.Deprecated annotation and @deprecated Javadoc tag with description.</td>
-<td>797</td></tr>
+<td>821</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>annotation</td>
 <td>MissingDeprecated</td>
 <td>Must include both @java.lang.Deprecated annotation and @deprecated Javadoc tag with description.</td>
-<td>803</td></tr>
+<td>827</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>820</td></tr>
+<td>844</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>821</td></tr>
+<td>845</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>825</td></tr>
+<td>849</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'lambda arguments' has incorrect indentation level 20, expected level should be 14.</td>
-<td>847</td></tr>
+<td>871</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 106).</td>
-<td>847</td></tr>
+<td>871</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'lambda arguments' has incorrect indentation level 20, expected level should be 14.</td>
-<td>848</td></tr>
+<td>872</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>848</td></tr></table></div>
+<td>872</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.HTestConst.java">org/apache/hadoop/hbase/HTestConst.java</h3>
 <table border="0" class="table table-striped">
@@ -19524,7 +19524,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</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">
@@ -28487,181 +28487,181 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>270</td></tr>
+<td>281</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>annotation</td>
 <td>MissingDeprecated</td>
 <td>Must include both @java.lang.Deprecated annotation and @deprecated Javadoc tag with description.</td>
-<td>388</td></tr>
+<td>409</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>annotation</td>
 <td>MissingDeprecated</td>
 <td>Must include both @java.lang.Deprecated annotation and @deprecated Javadoc tag with description.</td>
-<td>394</td></tr>
+<td>415</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>488</td></tr>
+<td>509</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>506</td></tr>
+<td>527</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>annotation</td>
 <td>MissingDeprecated</td>
 <td>Must include both @java.lang.Deprecated annotation and @deprecated Javadoc tag with description.</td>
-<td>508</td></tr>
+<td>529</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 110).</td>
-<td>514</td></tr>
+<td>535</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>636</td></tr>
+<td>657</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>647</td></tr>
+<td>668</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>673</td></tr>
+<td>694</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 102).</td>
-<td>709</td></tr>
+<td>730</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>771</td></tr>
+<td>831</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>805</td></tr>
+<td>865</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>856</td></tr>
+<td>916</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>928</td></tr>
+<td>988</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>1072</td></tr>
+<td>1132</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 114).</td>
-<td>1107</td></tr>
+<td>1167</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>1116</td></tr>
+<td>1176</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>1117</td></tr>
+<td>1177</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>1123</td></tr>
+<td>1183</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>1156</td></tr>
+<td>1216</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>1169</td></tr>
+<td>1229</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>1182</td></tr>
+<td>1242</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>1238</td></tr>
+<td>1298</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 101).</td>
-<td>1276</td></tr>
+<td>1336</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>annotation</td>
 <td>MissingDeprecated</td>
 <td>Must include both @java.lang.Deprecated annotation and @deprecated Javadoc tag with description.</td>
-<td>1350</td></tr>
+<td>1410</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>annotation</td>
 <td>MissingDeprecated</td>
 <td>Must include both @java.lang.Deprecated annotation and @deprecated Javadoc tag with description.</td>
-<td>1356</td></tr>
+<td>1416</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>annotation</td>
 <td>MissingDeprecated</td>
 <td>Must include both @java.lang.Deprecated annotation and @deprecated Javadoc tag with description.</td>
-<td>1361</td></tr>
+<td>1421</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>1379</td></tr>
+<td>1439</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>1382</td></tr></table></div>
+<td>1442</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TableState.java">org/apache/hadoop/hbase/client/TableState.java</h3>
 <table border="0" class="table table-striped">
@@ -73472,23 +73472,17 @@
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1208</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>coding</td>
-<td>InnerAssignment</td>
-<td>Inner assignments should be avoided.</td>
-<td>1371</td></tr></table></div>
+<td>1208</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.ProcedureScheduler.java">org/apache/hadoop/hbase/procedure2/ProcedureScheduler.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -73497,31 +73491,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.java">org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.NonceKey' import.</td>
 <td>43</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class ProcedureTestingUtility should be declared as final.</td>
 <td>48</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>179</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
@@ -73530,25 +73524,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.ProcedureUtil.java">org/apache/hadoop/hbase/procedure2/ProcedureUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.NonceKey' import.</td>
 <td>35</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>220</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
@@ -73557,37 +73551,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.java">org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.procedure2.util.DelayedUtil' import.</td>
 <td>39</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>169</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>192</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>257</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -73596,31 +73590,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.RemoteProcedureException.java">org/apache/hadoop/hbase/procedure2/RemoteProcedureException.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.ForeignExceptionUtil' import.</td>
 <td>26</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>52</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>53</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -73629,13 +73623,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.RootProcedureState.java">org/apache/hadoop/hbase/procedure2/RootProcedureState.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -73644,43 +73638,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.StateMachineProcedure.java">org/apache/hadoop/hbase/procedure2/StateMachineProcedure.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>90</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>159</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>166</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>171</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>190</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -73689,19 +73683,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.TestProcedureExecution.java">org/apache/hadoop/hbase/procedure2/TestProcedureExecution.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 47 should have line break after.</td>
 <td>87</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
@@ -73710,13 +73704,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.TestProcedureMetrics.java">org/apache/hadoop/hbase/procedure2/TestProcedureMetrics.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -73725,31 +73719,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.TestProcedureNonce.java">org/apache/hadoop/hbase/procedure2/TestProcedureNonce.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'while' construct must use '{}'s.</td>
 <td>128</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>242</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>243</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
@@ -73758,13 +73752,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.TestProcedureRecovery.java">org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
@@ -73773,13 +73767,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.TestProcedureReplayOrder.java">org/apache/hadoop/hbase/procedure2/TestProcedureReplayOrder.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
@@ -73788,31 +73782,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.TestProcedureSchedulerConcurrency.java">org/apache/hadoop/hbase/procedure2/TestProcedureSchedulerConcurrency.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - org.junit.Assert.assertEquals.</td>
 <td>20</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - org.junit.Assert.assertFalse.</td>
 <td>21</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - org.junit.Assert.assertTrue.</td>
 <td>22</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -73821,37 +73815,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.TestProcedureSuspended.java">org/apache/hadoop/hbase/procedure2/TestProcedureSuspended.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'while' construct must use '{}'s.</td>
 <td>139</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'while' construct must use '{}'s.</td>
 <td>147</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'while' construct must use '{}'s.</td>
 <td>158</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>219</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
@@ -73860,31 +73854,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.TestProcedureToString.java">org/apache/hadoop/hbase/procedure2/TestProcedureToString.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>90</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>91</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'extends' has incorrect indentation level 2, expected level should be 4.</td>
 <td>111</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -73893,19 +73887,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.TestStateMachineProcedure.java">org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>53</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -73914,25 +73908,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.TestYieldProcedures.java">org/apache/hadoop/hbase/procedure2/TestYieldProcedures.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 30 should have line break after.</td>
 <td>206</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 34 should have line break after.</td>
 <td>207</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
@@ -73941,19 +73935,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.store.ProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.procedure2.Procedure' import.</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -73962,13 +73956,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.store.ProcedureStoreBase.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStoreBase.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -73977,25 +73971,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>434</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>547</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -74004,13 +73998,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.store.TestProcedureStoreTracker.java">org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -74019,31 +74013,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFile.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker' import.</td>
 <td>31</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>117</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>198</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -74052,19 +74046,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormat.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.io.IOException' import.</td>
 <td>23</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -74073,67 +74067,67 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.io.IOException' import.</td>
 <td>23</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.procedure2.Procedure' import.</td>
 <td>30</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>119</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>202</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>207</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>227</td></tr>
-<tr class="a">
+<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>467</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>468</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>725</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -74142,49 +74136,49 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALLoaderPerformanceEvaluation.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALLoaderPerformanceEvaluation.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.lang.System.currentTimeMillis' import.</td>
 <td>42</td></tr>
-<tr class="a">
+<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>138</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>139</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be 4.</td>
 <td>210</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'NUM_PROCS_OPTION' has incorrect indentation level 8, expected level should be 10.</td>
 <td>212</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'UPDATES_PER_PROC_OPTION' has incorrect indentation level 8, expected level should be 10.</td>
 <td>213</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -74193,31 +74187,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALPerformanceEvaluation.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPerformanceEvaluation.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>AvoidStarImport</td>
 <td>Using the '.*' form of import should be avoided - org.apache.hadoop.fs.*.</td>
 <td>30</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>AvoidStarImport</td>
 <td>Using the '.*' form of import should be avoided - org.apache.hadoop.conf.*.</td>
 <td>31</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.conf.*' import.</td>
 <td>31</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>AvoidStarImport</td>
@@ -74226,19 +74220,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALPrettyPrinter.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.procedure2.Procedure' import.</td>
 <td>35</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -74247,25 +74241,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.store.wal.TestStressWALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/TestStressWALProcedureStore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - org.junit.Assert.assertFalse.</td>
 <td>21</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - org.junit.Assert.fail.</td>
 <td>23</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
@@ -74274,79 +74268,79 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.store.wal.TestWALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def' child has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>742</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>744</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>746</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
 <td>747</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
 <td>748</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
 <td>749</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>750</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>751</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>752</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
 <td>753</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 45 should have line break after.</td>
 <td>948</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
@@ -74355,67 +74349,67 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.CommonFSUtils' import.</td>
 <td>54</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>210</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>465</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>617</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>904</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>994</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>1044</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1141</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1273</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -74424,31 +74418,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.util.DelayedUtil.java">org/apache/hadoop/hbase/procedure2/util/DelayedUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.EnvironmentEdgeManager' import.</td>
 <td>28</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>EqualsHashCode</td>
 <td>Definition of 'equals()' without corresponding definition of 'hashCode()'.</td>
 <td>62</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>136</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -74457,31 +74451,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.util.StringUtils.java">org/apache/hadoop/hbase/procedure2/util/StringUtils.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>59</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>60</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>61</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -74490,25 +74484,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.protobuf.ProtobufMagic.java">org/apache/hadoop/hbase/protobuf/ProtobufMagic.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class ProtobufMagic should be declared as final.</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>43</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -74517,13 +74511,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.protobuf.ProtobufMessageConverter.java">org/apache/hadoop/hbase/protobuf/ProtobufMessageConverter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -74532,697 +74526,697 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.protobuf.ProtobufUtil.java">org/apache/hadoop/hbase/protobuf/ProtobufUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>189</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>264</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>294</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>314</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>333</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>334</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>335</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>336</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>337</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>338</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>339</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>340</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>341</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>342</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>343</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>344</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>354</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>355</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>356</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>357</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>358</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>359</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>360</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>361</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>362</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>363</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>364</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>365</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>374</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>377</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>455</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>458</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>468</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>471</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>500</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>570</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>573</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>583</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>586</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 117).</td>
 <td>652</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
 <td>670</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 112).</td>
 <td>691</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>705</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>708</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>728</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>734</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>748</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>767</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>769</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>852</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>954</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1058</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1129</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1130</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1132</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>1146</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1183</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1184</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1185</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1187</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1197</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1198</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1200</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>1203</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1227</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1228</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1298</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1300</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1340</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>1343</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1363</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1369</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>1403</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1460</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1462</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1467</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1468</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1469</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1470</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1471</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1472</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1473</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1474</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1475</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1485</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1490</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1491</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1492</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1493</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1494</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1495</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1496</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1497</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1498</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1499</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1512</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>1550</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1666</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1680</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1681</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1682</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>1693</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>1694</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 6, expected level should be 4.</td>
 <td>1695</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>1696</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 6, expected level should be 4.</td>
 <td>1697</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 6, expected level should be 4.</td>
 <td>1698</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>1699</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 6, expected level should be 4.</td>
 <td>1700</td></tr>
-<tr class="a">
+<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>1733</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1734</td></tr>
-<tr class="a">
+<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>1735</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1737</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1738</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -75231,37 +75225,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.protobuf.ReplicationProtbufUtil.java">org/apache/hadoop/hbase/protobuf/ReplicationProtbufUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>45</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>55</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>76</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>146</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -75270,43 +75264,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.protobuf.TestProtobufUtil.java">org/apache/hadoop/hbase/protobuf/TestProtobufUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>83</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>117</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>158</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>205</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>242</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -75315,19 +75309,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.protobuf.TestReplicationProtobuf.java">org/apache/hadoop/hbase/protobuf/TestReplicationProtobuf.java</h3>
 <table border="0" class="table table-striped">
-

<TRUNCATED>

[12/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.PlanComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.PlanComparator.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.PlanComparator.html
index 9267f53..c688159 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.PlanComparator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.PlanComparator.html
@@ -26,213 +26,239 @@
 <span class="sourceLineNo">018</span> */<a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.master.normalizer;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.util.ArrayList;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.Collections;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.Comparator;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.List;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.RegionMetrics;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.ServerName;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.Size;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.TableName;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.PlanType;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.slf4j.Logger;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.slf4j.LoggerFactory;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.40"></a>
+<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.ArrayList;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.Collections;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.Comparator;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.List;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.RegionMetrics;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.ServerName;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.Size;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.TableName;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.PlanType;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.slf4j.Logger;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.slf4j.LoggerFactory;<a name="line.40"></a>
 <span class="sourceLineNo">041</span><a name="line.41"></a>
-<span class="sourceLineNo">042</span>/**<a name="line.42"></a>
-<span class="sourceLineNo">043</span> * Simple implementation of region normalizer.<a name="line.43"></a>
-<span class="sourceLineNo">044</span> *<a name="line.44"></a>
-<span class="sourceLineNo">045</span> * Logic in use:<a name="line.45"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>/**<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * Simple implementation of region normalizer.<a name="line.45"></a>
 <span class="sourceLineNo">046</span> *<a name="line.46"></a>
-<span class="sourceLineNo">047</span> *  &lt;ol&gt;<a name="line.47"></a>
-<span class="sourceLineNo">048</span> *  &lt;li&gt; Get all regions of a given table<a name="line.48"></a>
-<span class="sourceLineNo">049</span> *  &lt;li&gt; Get avg size S of each region (by total size of store files reported in RegionMetrics)<a name="line.49"></a>
-<span class="sourceLineNo">050</span> *  &lt;li&gt; Seek every single region one by one. If a region R0 is bigger than S * 2, it is<a name="line.50"></a>
-<span class="sourceLineNo">051</span> *  kindly requested to split. Thereon evaluate the next region R1<a name="line.51"></a>
-<span class="sourceLineNo">052</span> *  &lt;li&gt; Otherwise, if R0 + R1 is smaller than S, R0 and R1 are kindly requested to merge.<a name="line.52"></a>
-<span class="sourceLineNo">053</span> *  Thereon evaluate the next region R2<a name="line.53"></a>
-<span class="sourceLineNo">054</span> *  &lt;li&gt; Otherwise, R1 is evaluated<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * &lt;/ol&gt;<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * &lt;p&gt;<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * Region sizes are coarse and approximate on the order of megabytes. Additionally,<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * "empty" regions (less than 1MB, with the previous note) are not merged away. This<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * is by design to prevent normalization from undoing the pre-splitting of a table.<a name="line.59"></a>
-<span class="sourceLineNo">060</span> */<a name="line.60"></a>
-<span class="sourceLineNo">061</span>@InterfaceAudience.Private<a name="line.61"></a>
-<span class="sourceLineNo">062</span>public class SimpleRegionNormalizer implements RegionNormalizer {<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>  private static final Logger LOG = LoggerFactory.getLogger(SimpleRegionNormalizer.class);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  private int minRegionCount;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private MasterServices masterServices;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private MasterRpcServices masterRpcServices;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  private static long[] skippedCount = new long[NormalizationPlan.PlanType.values().length];<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>  public SimpleRegionNormalizer() {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    minRegionCount = HBaseConfiguration.create().getInt("hbase.normalizer.min.region.count", 3);<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  }<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  /**<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * Set the master service.<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * @param masterServices inject instance of MasterServices<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   */<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  @Override<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  public void setMasterServices(MasterServices masterServices) {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    this.masterServices = masterServices;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  }<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  @Override<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  public void setMasterRpcServices(MasterRpcServices masterRpcServices) {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    this.masterRpcServices = masterRpcServices;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  }<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  @Override<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public void planSkipped(RegionInfo hri, PlanType type) {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    skippedCount[type.ordinal()]++;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  }<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  @Override<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  public long getSkippedCount(NormalizationPlan.PlanType type) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    return skippedCount[type.ordinal()];<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>  /**<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   * Comparator class that gives higher priority to region Split plan.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   */<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  static class PlanComparator implements Comparator&lt;NormalizationPlan&gt; {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    @Override<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    public int compare(NormalizationPlan plan1, NormalizationPlan plan2) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      boolean plan1IsSplit = plan1 instanceof SplitNormalizationPlan;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      boolean plan2IsSplit = plan2 instanceof SplitNormalizationPlan;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      if (plan1IsSplit &amp;&amp; plan2IsSplit) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>        return 0;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      } else if (plan1IsSplit) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        return -1;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      } else if (plan2IsSplit) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        return 1;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      } else {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>        return 0;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      }<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    }<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  private Comparator&lt;NormalizationPlan&gt; planComparator = new PlanComparator();<a name="line.117"></a>
+<span class="sourceLineNo">047</span> * Logic in use:<a name="line.47"></a>
+<span class="sourceLineNo">048</span> *<a name="line.48"></a>
+<span class="sourceLineNo">049</span> *  &lt;ol&gt;<a name="line.49"></a>
+<span class="sourceLineNo">050</span> *  &lt;li&gt; Get all regions of a given table<a name="line.50"></a>
+<span class="sourceLineNo">051</span> *  &lt;li&gt; Get avg size S of each region (by total size of store files reported in RegionMetrics)<a name="line.51"></a>
+<span class="sourceLineNo">052</span> *  &lt;li&gt; Seek every single region one by one. If a region R0 is bigger than S * 2, it is<a name="line.52"></a>
+<span class="sourceLineNo">053</span> *  kindly requested to split. Thereon evaluate the next region R1<a name="line.53"></a>
+<span class="sourceLineNo">054</span> *  &lt;li&gt; Otherwise, if R0 + R1 is smaller than S, R0 and R1 are kindly requested to merge.<a name="line.54"></a>
+<span class="sourceLineNo">055</span> *  Thereon evaluate the next region R2<a name="line.55"></a>
+<span class="sourceLineNo">056</span> *  &lt;li&gt; Otherwise, R1 is evaluated<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * &lt;/ol&gt;<a name="line.57"></a>
+<span class="sourceLineNo">058</span> * &lt;p&gt;<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * Region sizes are coarse and approximate on the order of megabytes. Additionally,<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * "empty" regions (less than 1MB, with the previous note) are not merged away. This<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * is by design to prevent normalization from undoing the pre-splitting of a table.<a name="line.61"></a>
+<span class="sourceLineNo">062</span> */<a name="line.62"></a>
+<span class="sourceLineNo">063</span>@InterfaceAudience.Private<a name="line.63"></a>
+<span class="sourceLineNo">064</span>public class SimpleRegionNormalizer implements RegionNormalizer {<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private static final Logger LOG = LoggerFactory.getLogger(SimpleRegionNormalizer.class);<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  private int minRegionCount;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private MasterServices masterServices;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  private MasterRpcServices masterRpcServices;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private static long[] skippedCount = new long[NormalizationPlan.PlanType.values().length];<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  public SimpleRegionNormalizer() {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    minRegionCount = HBaseConfiguration.create().getInt("hbase.normalizer.min.region.count", 3);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  }<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  /**<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * Set the master service.<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * @param masterServices inject instance of MasterServices<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   */<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  @Override<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  public void setMasterServices(MasterServices masterServices) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    this.masterServices = masterServices;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  @Override<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  public void setMasterRpcServices(MasterRpcServices masterRpcServices) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    this.masterRpcServices = masterRpcServices;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  }<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>  @Override<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  public void planSkipped(RegionInfo hri, PlanType type) {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    skippedCount[type.ordinal()]++;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  }<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>  @Override<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  public long getSkippedCount(NormalizationPlan.PlanType type) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    return skippedCount[type.ordinal()];<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  }<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  /**<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * Comparator class that gives higher priority to region Split plan.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   */<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  static class PlanComparator implements Comparator&lt;NormalizationPlan&gt; {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    @Override<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    public int compare(NormalizationPlan plan1, NormalizationPlan plan2) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      boolean plan1IsSplit = plan1 instanceof SplitNormalizationPlan;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      boolean plan2IsSplit = plan2 instanceof SplitNormalizationPlan;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      if (plan1IsSplit &amp;&amp; plan2IsSplit) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>        return 0;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      } else if (plan1IsSplit) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        return -1;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      } else if (plan2IsSplit) {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        return 1;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      } else {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>        return 0;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      }<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
 <span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  /**<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * Computes next most "urgent" normalization action on the table.<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * Action may be either a split, or a merge, or no action.<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   *<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * @param table table to normalize<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * @return normalization plan to execute<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  @Override<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  public List&lt;NormalizationPlan&gt; computePlanForTable(TableName table) throws HBaseIOException {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    if (table == null || table.isSystemTable()) {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      LOG.debug("Normalization of system table " + table + " isn't allowed");<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      return null;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    }<a name="line.131"></a>
-<span class="sourceLineNo">132</span><a name="line.132"></a>
-<span class="sourceLineNo">133</span>    List&lt;NormalizationPlan&gt; plans = new ArrayList&lt;&gt;();<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    List&lt;RegionInfo&gt; tableRegions = masterServices.getAssignmentManager().getRegionStates().<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      getRegionsOfTable(table);<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>    //TODO: should we make min number of regions a config param?<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    if (tableRegions == null || tableRegions.size() &lt; minRegionCount) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      int nrRegions = tableRegions == null ? 0 : tableRegions.size();<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      LOG.debug("Table " + table + " has " + nrRegions + " regions, required min number"<a name="line.140"></a>
-<span class="sourceLineNo">141</span>        + " of regions for normalizer to run is " + minRegionCount + ", not running normalizer");<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return null;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>    LOG.debug("Computing normalization plan for table: " + table +<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      ", number of regions: " + tableRegions.size());<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>    long totalSizeMb = 0;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    int acutalRegionCnt = 0;<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>    for (int i = 0; i &lt; tableRegions.size(); i++) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      RegionInfo hri = tableRegions.get(i);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      long regionSize = getRegionSize(hri);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      if (regionSize &gt; 0) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        acutalRegionCnt++;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        totalSizeMb += regionSize;<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>    double avgRegionSize = acutalRegionCnt == 0 ? 0 : totalSizeMb / (double) acutalRegionCnt;<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>    LOG.debug("Table " + table + ", total aggregated regions size: " + totalSizeMb);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    LOG.debug("Table " + table + ", average region size: " + avgRegionSize);<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>    int candidateIdx = 0;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    boolean splitEnabled = true, mergeEnabled = true;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    try {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      splitEnabled = masterRpcServices.isSplitOrMergeEnabled(null,<a name="line.168"></a>
-<span class="sourceLineNo">169</span>        RequestConverter.buildIsSplitOrMergeEnabledRequest(MasterSwitchType.SPLIT)).getEnabled();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    } catch (org.apache.hbase.thirdparty.com.google.protobuf.ServiceException e) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      LOG.debug("Unable to determine whether split is enabled", e);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    }<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    try {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      mergeEnabled = masterRpcServices.isSplitOrMergeEnabled(null,<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        RequestConverter.buildIsSplitOrMergeEnabledRequest(MasterSwitchType.MERGE)).getEnabled();<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    } catch (org.apache.hbase.thirdparty.com.google.protobuf.ServiceException e) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      LOG.debug("Unable to determine whether split is enabled", e);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    }<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    while (candidateIdx &lt; tableRegions.size()) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      RegionInfo hri = tableRegions.get(candidateIdx);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      long regionSize = getRegionSize(hri);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      // if the region is &gt; 2 times larger than average, we split it, split<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      // is more high priority normalization action than merge.<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      if (regionSize &gt; 2 * avgRegionSize) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        if (splitEnabled) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>          LOG.info("Table " + table + ", large region " + hri.getRegionNameAsString() + " has size "<a name="line.186"></a>
-<span class="sourceLineNo">187</span>              + regionSize + ", more than twice avg size, splitting");<a name="line.187"></a>
-<span class="sourceLineNo">188</span>          plans.add(new SplitNormalizationPlan(hri, null));<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      } else {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        if (candidateIdx == tableRegions.size()-1) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>          break;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        }<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        if (mergeEnabled) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          RegionInfo hri2 = tableRegions.get(candidateIdx+1);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>          long regionSize2 = getRegionSize(hri2);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>          if (regionSize &gt;= 0 &amp;&amp; regionSize2 &gt;= 0 &amp;&amp; regionSize + regionSize2 &lt; avgRegionSize) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>            LOG.info("Table " + table + ", small region size: " + regionSize<a name="line.198"></a>
-<span class="sourceLineNo">199</span>              + " plus its neighbor size: " + regionSize2<a name="line.199"></a>
-<span class="sourceLineNo">200</span>              + ", less than the avg size " + avgRegionSize + ", merging them");<a name="line.200"></a>
-<span class="sourceLineNo">201</span>            plans.add(new MergeNormalizationPlan(hri, hri2));<a name="line.201"></a>
-<span class="sourceLineNo">202</span>            candidateIdx++;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>          }<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      }<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      candidateIdx++;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    if (plans.isEmpty()) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      LOG.debug("No normalization needed, regions look good for table: " + table);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return null;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    Collections.sort(plans, planComparator);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    return plans;<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>  private long getRegionSize(RegionInfo hri) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    ServerName sn = masterServices.getAssignmentManager().getRegionStates().<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      getRegionServerOfRegion(hri);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    RegionMetrics regionLoad = masterServices.getServerManager().getLoad(sn).<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      getRegionMetrics().get(hri.getRegionName());<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    if (regionLoad == null) {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      LOG.debug(hri.getRegionNameAsString() + " was not found in RegionsLoad");<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      return -1;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    }<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    return (long) regionLoad.getStoreFileSize().get(Size.Unit.MEGABYTE);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>  }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>}<a name="line.227"></a>
+<span class="sourceLineNo">119</span>  private Comparator&lt;NormalizationPlan&gt; planComparator = new PlanComparator();<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  /**<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * Computes next most "urgent" normalization action on the table.<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * Action may be either a split, or a merge, or no action.<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   *<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * @param table table to normalize<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   * @return normalization plan to execute<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   */<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  @Override<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  public List&lt;NormalizationPlan&gt; computePlanForTable(TableName table) throws HBaseIOException {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    if (table == null || table.isSystemTable()) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      LOG.debug("Normalization of system table " + table + " isn't allowed");<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      return null;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    }<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span>    List&lt;NormalizationPlan&gt; plans = new ArrayList&lt;&gt;();<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    List&lt;RegionInfo&gt; tableRegions = masterServices.getAssignmentManager().getRegionStates().<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      getRegionsOfTable(table);<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>    //TODO: should we make min number of regions a config param?<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    if (tableRegions == null || tableRegions.size() &lt; minRegionCount) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      int nrRegions = tableRegions == null ? 0 : tableRegions.size();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      LOG.debug("Table " + table + " has " + nrRegions + " regions, required min number"<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        + " of regions for normalizer to run is " + minRegionCount + ", not running normalizer");<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      return null;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    }<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>    LOG.debug("Computing normalization plan for table: " + table +<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      ", number of regions: " + tableRegions.size());<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>    long totalSizeMb = 0;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    int acutalRegionCnt = 0;<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>    for (int i = 0; i &lt; tableRegions.size(); i++) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      RegionInfo hri = tableRegions.get(i);<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      long regionSize = getRegionSize(hri);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      if (regionSize &gt; 0) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>        acutalRegionCnt++;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>        totalSizeMb += regionSize;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      }<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    int targetRegionCount = -1;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    long targetRegionSize = -1;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    try {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      TableDescriptor tableDescriptor = masterServices.getTableDescriptors().get(table);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      if(tableDescriptor != null) {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        targetRegionCount =<a name="line.166"></a>
+<span class="sourceLineNo">167</span>            tableDescriptor.getNormalizerTargetRegionCount();<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        targetRegionSize =<a name="line.168"></a>
+<span class="sourceLineNo">169</span>            tableDescriptor.getNormalizerTargetRegionSize();<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        LOG.debug("Table {}:  target region count is {}, target region size is {}", table,<a name="line.170"></a>
+<span class="sourceLineNo">171</span>            targetRegionCount, targetRegionSize);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      }<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    } catch (IOException e) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      LOG.warn(<a name="line.174"></a>
+<span class="sourceLineNo">175</span>        "cannot get the target number and target size of table {}, they will be default value -1.",<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        table);<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>    double avgRegionSize;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    if (targetRegionSize &gt; 0) {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      avgRegionSize = targetRegionSize;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    } else if (targetRegionCount &gt; 0) {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      avgRegionSize = totalSizeMb / (double) targetRegionCount;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    } else {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      avgRegionSize = acutalRegionCnt == 0 ? 0 : totalSizeMb / (double) acutalRegionCnt;<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>    LOG.debug("Table " + table + ", total aggregated regions size: " + totalSizeMb);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    LOG.debug("Table " + table + ", average region size: " + avgRegionSize);<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>    int candidateIdx = 0;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    boolean splitEnabled = true, mergeEnabled = true;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    try {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      splitEnabled = masterRpcServices.isSplitOrMergeEnabled(null,<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        RequestConverter.buildIsSplitOrMergeEnabledRequest(MasterSwitchType.SPLIT)).getEnabled();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    } catch (org.apache.hbase.thirdparty.com.google.protobuf.ServiceException e) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      LOG.debug("Unable to determine whether split is enabled", e);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    }<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    try {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      mergeEnabled = masterRpcServices.isSplitOrMergeEnabled(null,<a name="line.200"></a>
+<span class="sourceLineNo">201</span>        RequestConverter.buildIsSplitOrMergeEnabledRequest(MasterSwitchType.MERGE)).getEnabled();<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    } catch (org.apache.hbase.thirdparty.com.google.protobuf.ServiceException e) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      LOG.debug("Unable to determine whether split is enabled", e);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    while (candidateIdx &lt; tableRegions.size()) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      RegionInfo hri = tableRegions.get(candidateIdx);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      long regionSize = getRegionSize(hri);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      // if the region is &gt; 2 times larger than average, we split it, split<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      // is more high priority normalization action than merge.<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (regionSize &gt; 2 * avgRegionSize) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        if (splitEnabled) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>          LOG.info("Table " + table + ", large region " + hri.getRegionNameAsString() + " has size "<a name="line.212"></a>
+<span class="sourceLineNo">213</span>              + regionSize + ", more than twice avg size, splitting");<a name="line.213"></a>
+<span class="sourceLineNo">214</span>          plans.add(new SplitNormalizationPlan(hri, null));<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        }<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      } else {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        if (candidateIdx == tableRegions.size()-1) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>          break;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        if (mergeEnabled) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>          RegionInfo hri2 = tableRegions.get(candidateIdx+1);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>          long regionSize2 = getRegionSize(hri2);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          if (regionSize &gt;= 0 &amp;&amp; regionSize2 &gt;= 0 &amp;&amp; regionSize + regionSize2 &lt; avgRegionSize) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>            LOG.info("Table " + table + ", small region size: " + regionSize<a name="line.224"></a>
+<span class="sourceLineNo">225</span>              + " plus its neighbor size: " + regionSize2<a name="line.225"></a>
+<span class="sourceLineNo">226</span>              + ", less than the avg size " + avgRegionSize + ", merging them");<a name="line.226"></a>
+<span class="sourceLineNo">227</span>            plans.add(new MergeNormalizationPlan(hri, hri2));<a name="line.227"></a>
+<span class="sourceLineNo">228</span>            candidateIdx++;<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>      candidateIdx++;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    }<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    if (plans.isEmpty()) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      LOG.debug("No normalization needed, regions look good for table: " + table);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      return null;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    }<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    Collections.sort(plans, planComparator);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    return plans;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>  }<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span>  private long getRegionSize(RegionInfo hri) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    ServerName sn = masterServices.getAssignmentManager().getRegionStates().<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      getRegionServerOfRegion(hri);<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    RegionMetrics regionLoad = masterServices.getServerManager().getLoad(sn).<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      getRegionMetrics().get(hri.getRegionName());<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    if (regionLoad == null) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      LOG.debug(hri.getRegionNameAsString() + " was not found in RegionsLoad");<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      return -1;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    return (long) regionLoad.getStoreFileSize().get(Size.Unit.MEGABYTE);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>}<a name="line.253"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html
index 9267f53..c688159 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.html
@@ -26,213 +26,239 @@
 <span class="sourceLineNo">018</span> */<a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.master.normalizer;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.util.ArrayList;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.Collections;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.Comparator;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.List;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.RegionMetrics;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.ServerName;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.Size;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.TableName;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.PlanType;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.slf4j.Logger;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.slf4j.LoggerFactory;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.40"></a>
+<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.ArrayList;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.Collections;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.Comparator;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.List;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.RegionMetrics;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.ServerName;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.Size;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.TableName;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.PlanType;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.slf4j.Logger;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.slf4j.LoggerFactory;<a name="line.40"></a>
 <span class="sourceLineNo">041</span><a name="line.41"></a>
-<span class="sourceLineNo">042</span>/**<a name="line.42"></a>
-<span class="sourceLineNo">043</span> * Simple implementation of region normalizer.<a name="line.43"></a>
-<span class="sourceLineNo">044</span> *<a name="line.44"></a>
-<span class="sourceLineNo">045</span> * Logic in use:<a name="line.45"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>/**<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * Simple implementation of region normalizer.<a name="line.45"></a>
 <span class="sourceLineNo">046</span> *<a name="line.46"></a>
-<span class="sourceLineNo">047</span> *  &lt;ol&gt;<a name="line.47"></a>
-<span class="sourceLineNo">048</span> *  &lt;li&gt; Get all regions of a given table<a name="line.48"></a>
-<span class="sourceLineNo">049</span> *  &lt;li&gt; Get avg size S of each region (by total size of store files reported in RegionMetrics)<a name="line.49"></a>
-<span class="sourceLineNo">050</span> *  &lt;li&gt; Seek every single region one by one. If a region R0 is bigger than S * 2, it is<a name="line.50"></a>
-<span class="sourceLineNo">051</span> *  kindly requested to split. Thereon evaluate the next region R1<a name="line.51"></a>
-<span class="sourceLineNo">052</span> *  &lt;li&gt; Otherwise, if R0 + R1 is smaller than S, R0 and R1 are kindly requested to merge.<a name="line.52"></a>
-<span class="sourceLineNo">053</span> *  Thereon evaluate the next region R2<a name="line.53"></a>
-<span class="sourceLineNo">054</span> *  &lt;li&gt; Otherwise, R1 is evaluated<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * &lt;/ol&gt;<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * &lt;p&gt;<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * Region sizes are coarse and approximate on the order of megabytes. Additionally,<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * "empty" regions (less than 1MB, with the previous note) are not merged away. This<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * is by design to prevent normalization from undoing the pre-splitting of a table.<a name="line.59"></a>
-<span class="sourceLineNo">060</span> */<a name="line.60"></a>
-<span class="sourceLineNo">061</span>@InterfaceAudience.Private<a name="line.61"></a>
-<span class="sourceLineNo">062</span>public class SimpleRegionNormalizer implements RegionNormalizer {<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>  private static final Logger LOG = LoggerFactory.getLogger(SimpleRegionNormalizer.class);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  private int minRegionCount;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private MasterServices masterServices;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private MasterRpcServices masterRpcServices;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  private static long[] skippedCount = new long[NormalizationPlan.PlanType.values().length];<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>  public SimpleRegionNormalizer() {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    minRegionCount = HBaseConfiguration.create().getInt("hbase.normalizer.min.region.count", 3);<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  }<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  /**<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * Set the master service.<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * @param masterServices inject instance of MasterServices<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   */<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  @Override<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  public void setMasterServices(MasterServices masterServices) {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    this.masterServices = masterServices;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  }<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  @Override<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  public void setMasterRpcServices(MasterRpcServices masterRpcServices) {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    this.masterRpcServices = masterRpcServices;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  }<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  @Override<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public void planSkipped(RegionInfo hri, PlanType type) {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    skippedCount[type.ordinal()]++;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  }<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  @Override<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  public long getSkippedCount(NormalizationPlan.PlanType type) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    return skippedCount[type.ordinal()];<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>  /**<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   * Comparator class that gives higher priority to region Split plan.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   */<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  static class PlanComparator implements Comparator&lt;NormalizationPlan&gt; {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    @Override<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    public int compare(NormalizationPlan plan1, NormalizationPlan plan2) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      boolean plan1IsSplit = plan1 instanceof SplitNormalizationPlan;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      boolean plan2IsSplit = plan2 instanceof SplitNormalizationPlan;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      if (plan1IsSplit &amp;&amp; plan2IsSplit) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>        return 0;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      } else if (plan1IsSplit) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        return -1;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      } else if (plan2IsSplit) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        return 1;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      } else {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>        return 0;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      }<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    }<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  private Comparator&lt;NormalizationPlan&gt; planComparator = new PlanComparator();<a name="line.117"></a>
+<span class="sourceLineNo">047</span> * Logic in use:<a name="line.47"></a>
+<span class="sourceLineNo">048</span> *<a name="line.48"></a>
+<span class="sourceLineNo">049</span> *  &lt;ol&gt;<a name="line.49"></a>
+<span class="sourceLineNo">050</span> *  &lt;li&gt; Get all regions of a given table<a name="line.50"></a>
+<span class="sourceLineNo">051</span> *  &lt;li&gt; Get avg size S of each region (by total size of store files reported in RegionMetrics)<a name="line.51"></a>
+<span class="sourceLineNo">052</span> *  &lt;li&gt; Seek every single region one by one. If a region R0 is bigger than S * 2, it is<a name="line.52"></a>
+<span class="sourceLineNo">053</span> *  kindly requested to split. Thereon evaluate the next region R1<a name="line.53"></a>
+<span class="sourceLineNo">054</span> *  &lt;li&gt; Otherwise, if R0 + R1 is smaller than S, R0 and R1 are kindly requested to merge.<a name="line.54"></a>
+<span class="sourceLineNo">055</span> *  Thereon evaluate the next region R2<a name="line.55"></a>
+<span class="sourceLineNo">056</span> *  &lt;li&gt; Otherwise, R1 is evaluated<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * &lt;/ol&gt;<a name="line.57"></a>
+<span class="sourceLineNo">058</span> * &lt;p&gt;<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * Region sizes are coarse and approximate on the order of megabytes. Additionally,<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * "empty" regions (less than 1MB, with the previous note) are not merged away. This<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * is by design to prevent normalization from undoing the pre-splitting of a table.<a name="line.61"></a>
+<span class="sourceLineNo">062</span> */<a name="line.62"></a>
+<span class="sourceLineNo">063</span>@InterfaceAudience.Private<a name="line.63"></a>
+<span class="sourceLineNo">064</span>public class SimpleRegionNormalizer implements RegionNormalizer {<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private static final Logger LOG = LoggerFactory.getLogger(SimpleRegionNormalizer.class);<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  private int minRegionCount;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private MasterServices masterServices;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  private MasterRpcServices masterRpcServices;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private static long[] skippedCount = new long[NormalizationPlan.PlanType.values().length];<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  public SimpleRegionNormalizer() {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    minRegionCount = HBaseConfiguration.create().getInt("hbase.normalizer.min.region.count", 3);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  }<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  /**<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * Set the master service.<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * @param masterServices inject instance of MasterServices<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   */<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  @Override<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  public void setMasterServices(MasterServices masterServices) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    this.masterServices = masterServices;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  @Override<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  public void setMasterRpcServices(MasterRpcServices masterRpcServices) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    this.masterRpcServices = masterRpcServices;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  }<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>  @Override<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  public void planSkipped(RegionInfo hri, PlanType type) {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    skippedCount[type.ordinal()]++;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  }<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>  @Override<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  public long getSkippedCount(NormalizationPlan.PlanType type) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    return skippedCount[type.ordinal()];<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  }<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  /**<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * Comparator class that gives higher priority to region Split plan.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   */<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  static class PlanComparator implements Comparator&lt;NormalizationPlan&gt; {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    @Override<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    public int compare(NormalizationPlan plan1, NormalizationPlan plan2) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      boolean plan1IsSplit = plan1 instanceof SplitNormalizationPlan;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      boolean plan2IsSplit = plan2 instanceof SplitNormalizationPlan;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      if (plan1IsSplit &amp;&amp; plan2IsSplit) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>        return 0;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      } else if (plan1IsSplit) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        return -1;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      } else if (plan2IsSplit) {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        return 1;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      } else {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>        return 0;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      }<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
 <span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  /**<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * Computes next most "urgent" normalization action on the table.<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * Action may be either a split, or a merge, or no action.<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   *<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * @param table table to normalize<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * @return normalization plan to execute<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  @Override<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  public List&lt;NormalizationPlan&gt; computePlanForTable(TableName table) throws HBaseIOException {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    if (table == null || table.isSystemTable()) {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      LOG.debug("Normalization of system table " + table + " isn't allowed");<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      return null;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    }<a name="line.131"></a>
-<span class="sourceLineNo">132</span><a name="line.132"></a>
-<span class="sourceLineNo">133</span>    List&lt;NormalizationPlan&gt; plans = new ArrayList&lt;&gt;();<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    List&lt;RegionInfo&gt; tableRegions = masterServices.getAssignmentManager().getRegionStates().<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      getRegionsOfTable(table);<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>    //TODO: should we make min number of regions a config param?<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    if (tableRegions == null || tableRegions.size() &lt; minRegionCount) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      int nrRegions = tableRegions == null ? 0 : tableRegions.size();<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      LOG.debug("Table " + table + " has " + nrRegions + " regions, required min number"<a name="line.140"></a>
-<span class="sourceLineNo">141</span>        + " of regions for normalizer to run is " + minRegionCount + ", not running normalizer");<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return null;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>    LOG.debug("Computing normalization plan for table: " + table +<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      ", number of regions: " + tableRegions.size());<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>    long totalSizeMb = 0;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    int acutalRegionCnt = 0;<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>    for (int i = 0; i &lt; tableRegions.size(); i++) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      RegionInfo hri = tableRegions.get(i);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      long regionSize = getRegionSize(hri);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      if (regionSize &gt; 0) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        acutalRegionCnt++;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        totalSizeMb += regionSize;<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>    double avgRegionSize = acutalRegionCnt == 0 ? 0 : totalSizeMb / (double) acutalRegionCnt;<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>    LOG.debug("Table " + table + ", total aggregated regions size: " + totalSizeMb);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    LOG.debug("Table " + table + ", average region size: " + avgRegionSize);<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>    int candidateIdx = 0;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    boolean splitEnabled = true, mergeEnabled = true;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    try {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      splitEnabled = masterRpcServices.isSplitOrMergeEnabled(null,<a name="line.168"></a>
-<span class="sourceLineNo">169</span>        RequestConverter.buildIsSplitOrMergeEnabledRequest(MasterSwitchType.SPLIT)).getEnabled();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    } catch (org.apache.hbase.thirdparty.com.google.protobuf.ServiceException e) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      LOG.debug("Unable to determine whether split is enabled", e);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    }<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    try {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      mergeEnabled = masterRpcServices.isSplitOrMergeEnabled(null,<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        RequestConverter.buildIsSplitOrMergeEnabledRequest(MasterSwitchType.MERGE)).getEnabled();<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    } catch (org.apache.hbase.thirdparty.com.google.protobuf.ServiceException e) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      LOG.debug("Unable to determine whether split is enabled", e);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    }<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    while (candidateIdx &lt; tableRegions.size()) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      RegionInfo hri = tableRegions.get(candidateIdx);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      long regionSize = getRegionSize(hri);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      // if the region is &gt; 2 times larger than average, we split it, split<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      // is more high priority normalization action than merge.<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      if (regionSize &gt; 2 * avgRegionSize) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        if (splitEnabled) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>          LOG.info("Table " + table + ", large region " + hri.getRegionNameAsString() + " has size "<a name="line.186"></a>
-<span class="sourceLineNo">187</span>              + regionSize + ", more than twice avg size, splitting");<a name="line.187"></a>
-<span class="sourceLineNo">188</span>          plans.add(new SplitNormalizationPlan(hri, null));<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      } else {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        if (candidateIdx == tableRegions.size()-1) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>          break;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        }<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        if (mergeEnabled) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          RegionInfo hri2 = tableRegions.get(candidateIdx+1);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>          long regionSize2 = getRegionSize(hri2);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>          if (regionSize &gt;= 0 &amp;&amp; regionSize2 &gt;= 0 &amp;&amp; regionSize + regionSize2 &lt; avgRegionSize) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>            LOG.info("Table " + table + ", small region size: " + regionSize<a name="line.198"></a>
-<span class="sourceLineNo">199</span>              + " plus its neighbor size: " + regionSize2<a name="line.199"></a>
-<span class="sourceLineNo">200</span>              + ", less than the avg size " + avgRegionSize + ", merging them");<a name="line.200"></a>
-<span class="sourceLineNo">201</span>            plans.add(new MergeNormalizationPlan(hri, hri2));<a name="line.201"></a>
-<span class="sourceLineNo">202</span>            candidateIdx++;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>          }<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      }<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      candidateIdx++;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    if (plans.isEmpty()) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      LOG.debug("No normalization needed, regions look good for table: " + table);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return null;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    Collections.sort(plans, planComparator);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    return plans;<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>  private long getRegionSize(RegionInfo hri) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    ServerName sn = masterServices.getAssignmentManager().getRegionStates().<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      getRegionServerOfRegion(hri);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    RegionMetrics regionLoad = masterServices.getServerManager().getLoad(sn).<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      getRegionMetrics().get(hri.getRegionName());<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    if (regionLoad == null) {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      LOG.debug(hri.getRegionNameAsString() + " was not found in RegionsLoad");<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      return -1;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    }<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    return (long) regionLoad.getStoreFileSize().get(Size.Unit.MEGABYTE);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>  }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>}<a name="line.227"></a>
+<span class="sourceLineNo">119</span>  private Comparator&lt;NormalizationPlan&gt; planComparator = new PlanComparator();<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  /**<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * Computes next most "urgent" normalization action on the table.<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * Action may be either a split, or a merge, or no action.<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   *<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * @param table table to normalize<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   * @return normalization plan to execute<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   */<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  @Override<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  public List&lt;NormalizationPlan&gt; computePlanForTable(TableName table) throws HBaseIOException {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    if (table == null || table.isSystemTable()) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      LOG.debug("Normalization of system table " + table + " isn't allowed");<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      return null;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    }<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span>    List&lt;NormalizationPlan&gt; plans = new ArrayList&lt;&gt;();<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    List&lt;RegionInfo&gt; tableRegions = masterServices.getAssignmentManager().getRegionStates().<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      getRegionsOfTable(table);<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>    //TODO: should we make min number of regions a config param?<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    if (tableRegions == null || tableRegions.size() &lt; minRegionCount) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      int nrRegions = tableRegions == null ? 0 : tableRegions.size();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      LOG.debug("Table " + table + " has " + nrRegions + " regions, required min number"<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        + " of regions for normalizer to run is " + minRegionCount + ", not running normalizer");<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      return null;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    }<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>    LOG.debug("Computing normalization plan for table: " + table +<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      ", number of regions: " + tableRegions.size());<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>    long totalSizeMb = 0;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    int acutalRegionCnt = 0;<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>    for (int i = 0; i &lt; tableRegions.size(); i++) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      RegionInfo hri = tableRegions.get(i);<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      long regionSize = getRegionSize(hri);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      if (regionSize &gt; 0) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>        acutalRegionCnt++;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>        totalSizeMb += regionSize;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      }<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    int targetRegionCount = -1;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    long targetRegionSize = -1;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    try {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      TableDescriptor tableDescriptor = masterServices.getTableDescriptors().get(table);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      if(tableDescriptor != null) {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        targetRegionCount =<a name="line.166"></a>
+<span class="sourceLineNo">167</span>            tableDescriptor.getNormalizerTargetRegionCount();<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        targetRegionSize =<a name="line.168"></a>
+<span class="sourceLineNo">169</span>            tableDescriptor.getNormalizerTargetRegionSize();<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        LOG.debug("Table {}:  target region count is {}, target region size is {}", table,<a name="line.170"></a>
+<span class="sourceLineNo">171</span>            targetRegionCount, targetRegionSize);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      }<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    } catch (IOException e) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      LOG.warn(<a name="line.174"></a>
+<span class="sourceLineNo">175</span>        "cannot get the target number and target size of table {}, they will be default value -1.",<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        table);<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>    double avgRegionSize;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    if (targetRegionSize &gt; 0) {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      avgRegionSize = targetRegionSize;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    } else if (targetRegionCount &gt; 0) {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      avgRegionSize = totalSizeMb / (double) targetRegionCount;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    } else {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      avgRegionSize = acutalRegionCnt == 0 ? 0 : totalSizeMb / (double) acutalRegionCnt;<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>    LOG.debug("Table " + table + ", total aggregated regions size: " + totalSizeMb);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    LOG.debug("Table " + table + ", average region size: " + avgRegionSize);<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>    int candidateIdx = 0;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    boolean splitEnabled = true, mergeEnabled = true;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    try {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      splitEnabled = masterRpcServices.isSplitOrMergeEnabled(null,<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        RequestConverter.buildIsSplitOrMergeEnabledRequest(MasterSwitchType.SPLIT)).getEnabled();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    } catch (org.apache.hbase.thirdparty.com.google.protobuf.ServiceException e) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      LOG.debug("Unable to determine whether split is enabled", e);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    }<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    try {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      mergeEnabled = masterRpcServices.isSplitOrMergeEnabled(null,<a name="line.200"></a>
+<span class="sourceLineNo">201</span>        RequestConverter.buildIsSplitOrMergeEnabledRequest(MasterSwitchType.MERGE)).getEnabled();<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    } catch (org.apache.hbase.thirdparty.com.google.protobuf.ServiceException e) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      LOG.debug("Unable to determine whether split is enabled", e);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    while (candidateIdx &lt; tableRegions.size()) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      RegionInfo hri = tableRegions.get(candidateIdx);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      long regionSize = getRegionSize(hri);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      // if the region is &gt; 2 times larger than average, we split it, split<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      // is more high priority normalization action than merge.<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (regionSize &gt; 2 * avgRegionSize) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        if (splitEnabled) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>          LOG.info("Table " + table + ", large region " + hri.getRegionNameAsString() + " has size "<a name="line.212"></a>
+<span class="sourceLineNo">213</span>              + regionSize + ", more than twice avg size, splitting");<a name="line.213"></a>
+<span class="sourceLineNo">214</span>          plans.add(new SplitNormalizationPlan(hri, null));<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        }<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      } else {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        if (candidateIdx == tableRegions.size()-1) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>          break;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        if (mergeEnabled) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>          RegionInfo hri2 = tableRegions.get(candidateIdx+1);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>          long regionSize2 = getRegionSize(hri2);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          if (regionSize &gt;= 0 &amp;&amp; regionSize2 &gt;= 0 &amp;&amp; regionSize + regionSize2 &lt; avgRegionSize) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>            LOG.info("Table " + table + ", small region size: " + regionSize<a name="line.224"></a>
+<span class="sourceLineNo">225</span>              + " plus its neighbor size: " + regionSize2<a name="line.225"></a>
+<span class="sourceLineNo">226</span>              + ", less than the avg size " + avgRegionSize + ", merging them");<a name="line.226"></a>
+<span class="sourceLineNo">227</span>            plans.add(new MergeNormalizationPlan(hri, hri2));<a name="line.227"></a>
+<span class="sourceLineNo">228</span>            candidateIdx++;<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>      candidateIdx++;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    }<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    if (plans.isEmpty()) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      LOG.debug("No normalization needed, regions look good for table: " + table);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      return null;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    }<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    Collections.sort(plans, planComparator);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    return plans;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>  }<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span>  private long getRegionSize(RegionInfo hri) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    ServerName sn = masterServices.getAssignmentManager().getRegionStates().<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      getRegionServerOfRegion(hri);<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    RegionMetrics regionLoad = masterServices.getServerManager().getLoad(sn).<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      getRegionMetrics().get(hri.getRegionName());<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    if (regionLoad == null) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      LOG.debug(hri.getRegionNameAsString() + " was not found in RegionsLoad");<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      return -1;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    return (long) regionLoad.getStoreFileSize().get(Size.Unit.MEGABYTE);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>}<a name="line.253"></a>
 
 
 


[21/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html b/devapidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html
index 1c62493..cf030a2 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":42,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":9,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":42,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":42,"i51":42,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":9,"i63":10,"i64":10,"i65":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":42,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":9,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":42,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":42,"i55":42,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":10,"i66":9,"i67":10,"i68":10,"i69":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.466">TableDescriptorBuilder.ModifyableTableDescriptor</a>
+public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.487">TableDescriptorBuilder.ModifyableTableDescriptor</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/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>, <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;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&gt;</pre>
 <div class="block">TODO: make this private after removing the HTableDescriptor</div>
@@ -295,189 +295,201 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/TableDescripto
 </td>
 </tr>
 <tr id="i12" class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#getNormalizerTargetRegionCount--">getNormalizerTargetRegionCount</a></span>()</code>
+<div class="block">Check if there is the target region count.</div>
+</td>
+</tr>
+<tr id="i13" class="rowColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#getNormalizerTargetRegionSize--">getNormalizerTargetRegionSize</a></span>()</code>
+<div class="block">Check if there is the target region size.</div>
+</td>
+</tr>
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>private &lt;T&gt;&nbsp;T</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#getOrDefault-org.apache.hadoop.hbase.util.Bytes-java.util.function.Function-T-">getOrDefault</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key,
             <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="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,T&gt;&nbsp;function,
             T&nbsp;defaultValue)</code>&nbsp;</td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code><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 class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#getOwnerString--">getOwnerString</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#getPriority--">getPriority</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#getRegionReplication--">getRegionReplication</a></span>()</code>
 <div class="block">Returns the configured replicas per region</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code><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 class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#getRegionSplitPolicyClassName--">getRegionSplitPolicyClassName</a></span>()</code>
 <div class="block">This gets the class associated with the region split policy which
  determines when a region split should occur.</div>
 </td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#getTableName--">getTableName</a></span>()</code>
 <div class="block">Get the name of the table</div>
 </td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code>byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#getValue-byte:A-">getValue</a></span>(byte[]&nbsp;key)</code>
 <div class="block">Getter for accessing the metadata associated with the key.</div>
 </td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#getValue-org.apache.hadoop.hbase.util.Bytes-">getValue</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key)</code>
 <div class="block">Getter for accessing the metadata associated with the key.</div>
 </td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code><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 class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#getValue-java.lang.String-">getValue</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</code>
 <div class="block">Getter for accessing the metadata associated with the key.</div>
 </td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>,<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#getValues--">getValues</a></span>()</code>
 <div class="block">Getter for fetching an unmodifiable <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#values"><code>values</code></a> map.</div>
 </td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#getValues-boolean-">getValues</a></span>(boolean&nbsp;printDefaults)</code>&nbsp;</td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#hasColumnFamily-byte:A-">hasColumnFamily</a></span>(byte[]&nbsp;familyName)</code>
 <div class="block">Checks to see if this table contains the given column family</div>
 </td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#hasCoprocessor-java.lang.String-">hasCoprocessor</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;classNameToMatch)</code>
 <div class="block">Check if the table has an attached co-processor represented by the name
  className</div>
 </td>
 </tr>
-<tr id="i25" class="rowColor">
+<tr id="i27" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#hashCode--">hashCode</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i26" class="altColor">
+<tr id="i28" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#hasRegionMemStoreReplication--">hasRegionMemStoreReplication</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i27" class="rowColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#isCompactionEnabled--">isCompactionEnabled</a></span>()</code>
 <div class="block">Check if the compaction enable flag of the table is true.</div>
 </td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#isMetaRegion--">isMetaRegion</a></span>()</code>
 <div class="block">Checks if this table is <code> hbase:meta </code> region.</div>
 </td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#isMetaTable--">isMetaTable</a></span>()</code>
 <div class="block">Checks if the table is a <code>hbase:meta</code> table</div>
 </td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#isNormalizationEnabled--">isNormalizationEnabled</a></span>()</code>
 <div class="block">Check if normalization enable flag of the table is true.</div>
 </td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#isReadOnly--">isReadOnly</a></span>()</code>
 <div class="block">Check if the readOnly flag of the table is set.</div>
 </td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#modifyColumnFamily-org.apache.hadoop.hbase.client.ColumnFamilyDescriptor-">modifyColumnFamily</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;family)</code>
 <div class="block">Modifies the existing column family.</div>
 </td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#parseFrom-byte:A-">parseFrom</a></span>(byte[]&nbsp;bytes)</code>&nbsp;</td>
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#putColumnFamily-org.apache.hadoop.hbase.client.ColumnFamilyDescriptor-">putColumnFamily</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;family)</code>&nbsp;</td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#removeColumnFamily-byte:A-">removeColumnFamily</a></span>(byte[]&nbsp;column)</code>
 <div class="block">Removes the ColumnFamilyDescriptor with name specified by the parameter column
  from the table descriptor</div>
 </td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i38" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#removeCoprocessor-java.lang.String-">removeCoprocessor</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;className)</code>
 <div class="block">Remove a coprocessor from those set on the table</div>
 </td>
 </tr>
-<tr id="i37" class="rowColor">
+<tr id="i39" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#removeValue-byte:A-">removeValue</a></span>(byte[]&nbsp;key)</code>
 <div class="block">Remove metadata represented by the key from the <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#values"><code>values</code></a> map</div>
 </td>
 </tr>
-<tr id="i38" class="altColor">
+<tr id="i40" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#removeValue-org.apache.hadoop.hbase.util.Bytes-">removeValue</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key)</code>
 <div class="block">Remove metadata represented by the key from the <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#values"><code>values</code></a> map</div>
 </td>
 </tr>
-<tr id="i39" class="rowColor">
+<tr id="i41" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setColumnFamily-org.apache.hadoop.hbase.client.ColumnFamilyDescriptor-">setColumnFamily</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;family)</code>
 <div class="block">Adds a column family.</div>
 </td>
 </tr>
-<tr id="i40" class="altColor">
+<tr id="i42" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setCompactionEnabled-boolean-">setCompactionEnabled</a></span>(boolean&nbsp;isEnable)</code>
 <div class="block">Setting the table compaction enable flag.</div>
 </td>
 </tr>
-<tr id="i41" class="rowColor">
+<tr id="i43" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setCoprocessor-org.apache.hadoop.hbase.client.CoprocessorDescriptor-">setCoprocessor</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/CoprocessorDescriptor.html" title="interface in org.apache.hadoop.hbase.client">CoprocessorDescriptor</a>&nbsp;cp)</code>
 <div class="block">Add a table coprocessor to this table.</div>
 </td>
 </tr>
-<tr id="i42" class="altColor">
+<tr id="i44" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setCoprocessor-java.lang.String-">setCoprocessor</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;className)</code>
 <div class="block">Add a table coprocessor to this table.</div>
 </td>
 </tr>
-<tr id="i43" class="rowColor">
+<tr id="i45" class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setCoprocessorToMap-java.lang.String-">setCoprocessorToMap</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;specStr)</code>
 <div class="block">Add coprocessor to values Map</div>
 </td>
 </tr>
-<tr id="i44" class="altColor">
+<tr id="i46" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setCoprocessorWithSpec-java.lang.String-">setCoprocessorWithSpec</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;specStr)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -486,122 +498,134 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/TableDescripto
 </div>
 </td>
 </tr>
-<tr id="i45" class="rowColor">
+<tr id="i47" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setDurability-org.apache.hadoop.hbase.client.Durability-">setDurability</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability)</code>
 <div class="block">Sets the <a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><code>Durability</code></a> setting for the table.</div>
 </td>
 </tr>
-<tr id="i46" class="altColor">
+<tr id="i48" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setFlushPolicyClassName-java.lang.String-">setFlushPolicyClassName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;clazz)</code>
 <div class="block">This sets the class associated with the flush policy which determines
  determines the stores need to be flushed when flushing a region.</div>
 </td>
 </tr>
-<tr id="i47" class="rowColor">
+<tr id="i49" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setMaxFileSize-long-">setMaxFileSize</a></span>(long&nbsp;maxFileSize)</code>
 <div class="block">Sets the maximum size upto which a region can grow to after which a
  region split is triggered.</div>
 </td>
 </tr>
-<tr id="i48" class="altColor">
+<tr id="i50" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setMemStoreFlushSize-long-">setMemStoreFlushSize</a></span>(long&nbsp;memstoreFlushSize)</code>
 <div class="block">Represents the maximum size of the memstore after which the contents of
  the memstore are flushed to the filesystem.</div>
 </td>
 </tr>
-<tr id="i49" class="rowColor">
+<tr id="i51" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setNormalizationEnabled-boolean-">setNormalizationEnabled</a></span>(boolean&nbsp;isEnable)</code>
 <div class="block">Setting the table normalization enable flag.</div>
 </td>
 </tr>
-<tr id="i50" class="altColor">
+<tr id="i52" class="altColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setNormalizerTargetRegionCount-int-">setNormalizerTargetRegionCount</a></span>(int&nbsp;regionCount)</code>
+<div class="block">Setting the target region count of table normalization .</div>
+</td>
+</tr>
+<tr id="i53" class="rowColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setNormalizerTargetRegionSize-long-">setNormalizerTargetRegionSize</a></span>(long&nbsp;regionSize)</code>
+<div class="block">Setting the target region size of table normalization.</div>
+</td>
+</tr>
+<tr id="i54" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setOwner-org.apache.hadoop.hbase.security.User-">setOwner</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;owner)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>
 </tr>
-<tr id="i51" class="rowColor">
+<tr id="i55" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setOwnerString-java.lang.String-">setOwnerString</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;ownerString)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>
 </tr>
-<tr id="i52" class="altColor">
+<tr id="i56" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setPriority-int-">setPriority</a></span>(int&nbsp;priority)</code>&nbsp;</td>
 </tr>
-<tr id="i53" class="rowColor">
+<tr id="i57" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setReadOnly-boolean-">setReadOnly</a></span>(boolean&nbsp;readOnly)</code>
 <div class="block">Setting the table as read only sets all the columns in the table as read
  only.</div>
 </td>
 </tr>
-<tr id="i54" class="altColor">
+<tr id="i58" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setRegionMemStoreReplication-boolean-">setRegionMemStoreReplication</a></span>(boolean&nbsp;memstoreReplication)</code>
 <div class="block">Enable or Disable the memstore replication from the primary region to the
  replicas.</div>
 </td>
 </tr>
-<tr id="i55" class="rowColor">
+<tr id="i59" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setRegionReplication-int-">setRegionReplication</a></span>(int&nbsp;regionReplication)</code>
 <div class="block">Sets the number of replicas per region.</div>
 </td>
 </tr>
-<tr id="i56" class="altColor">
+<tr id="i60" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setRegionSplitPolicyClassName-java.lang.String-">setRegionSplitPolicyClassName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;clazz)</code>
 <div class="block">This sets the class associated with the region split policy which
  determines when a region split should occur.</div>
 </td>
 </tr>
-<tr id="i57" class="rowColor">
+<tr id="i61" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setValue-byte:A-byte:A-">setValue</a></span>(byte[]&nbsp;key,
         byte[]&nbsp;value)</code>
 <div class="block">Setter for storing metadata as a (key, value) pair in <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#values"><code>values</code></a> map</div>
 </td>
 </tr>
-<tr id="i58" class="altColor">
+<tr id="i62" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setValue-org.apache.hadoop.hbase.util.Bytes-org.apache.hadoop.hbase.util.Bytes-">setValue</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key,
         <a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;value)</code>&nbsp;</td>
 </tr>
-<tr id="i59" class="rowColor">
+<tr id="i63" class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setValue-org.apache.hadoop.hbase.util.Bytes-java.lang.String-">setValue</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key,
         <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;value)</code>&nbsp;</td>
 </tr>
-<tr id="i60" class="altColor">
+<tr id="i64" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setValue-java.lang.String-java.lang.String-">setValue</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key,
         <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;value)</code>&nbsp;</td>
 </tr>
-<tr id="i61" class="rowColor">
+<tr id="i65" class="rowColor">
 <td class="colFirst"><code>private byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#toByteArray--">toByteArray</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i62" class="altColor">
+<tr id="i66" class="altColor">
 <td class="colFirst"><code>private static &lt;T&gt;&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#toBytesOrNull-T-java.util.function.Function-">toBytesOrNull</a></span>(T&nbsp;t,
              <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;T,byte[]&gt;&nbsp;f)</code>&nbsp;</td>
 </tr>
-<tr id="i63" class="rowColor">
+<tr id="i67" class="rowColor">
 <td class="colFirst"><code><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 class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#toString--">toString</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i64" class="altColor">
+<tr id="i68" class="altColor">
 <td class="colFirst"><code><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 class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#toStringCustomizedValues--">toStringCustomizedValues</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i65" class="rowColor">
+<tr id="i69" class="rowColor">
 <td class="colFirst"><code><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 class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#toStringTableAttributes--">toStringTableAttributes</a></span>()</code>&nbsp;</td>
 </tr>
@@ -640,7 +664,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/TableDescripto
 <ul class="blockList">
 <li class="blockList">
 <h4>name</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.469">name</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.490">name</a></pre>
 </li>
 </ul>
 <a name="values">
@@ -649,7 +673,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/TableDescripto
 <ul class="blockList">
 <li class="blockList">
 <h4>values</h4>
-<pre>private final&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="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>,<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.476">values</a></pre>
+<pre>private final&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="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>,<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.497">values</a></pre>
 <div class="block">A map which holds the metadata information of the table. This metadata
  includes values like IS_META, SPLIT_POLICY, MAX_FILE_SIZE,
  READONLY, MEMSTORE_FLUSHSIZE etc...</div>
@@ -661,7 +685,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/TableDescripto
 <ul class="blockListLast">
 <li class="blockList">
 <h4>families</h4>
-<pre>private final&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;byte[],<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.481">families</a></pre>
+<pre>private final&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;byte[],<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.502">families</a></pre>
 <div class="block">Maps column family name to the respective FamilyDescriptors</div>
 </li>
 </ul>
@@ -680,7 +704,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/TableDescripto
 <li class="blockList">
 <h4>ModifyableTableDescriptor</h4>
 <pre>@InterfaceAudience.Private
-public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.491">ModifyableTableDescriptor</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name)</pre>
+public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.512">ModifyableTableDescriptor</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name)</pre>
 <div class="block">Construct a table descriptor specifying a TableName object</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -695,7 +719,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>ModifyableTableDescriptor</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.495">ModifyableTableDescriptor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.516">ModifyableTableDescriptor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
 </li>
 </ul>
 <a name="ModifyableTableDescriptor-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableDescriptor-">
@@ -706,7 +730,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <h4>ModifyableTableDescriptor</h4>
 <pre>@InterfaceAudience.Private
  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.510">ModifyableTableDescriptor</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name,
+public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.531">ModifyableTableDescriptor</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name,
                                                                          <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Construct a table descriptor by cloning the descriptor passed as a
@@ -727,7 +751,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ModifyableTableDescriptor</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.514">ModifyableTableDescriptor</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name,
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.535">ModifyableTableDescriptor</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name,
                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&gt;&nbsp;families,
                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>,<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&gt;&nbsp;values)</pre>
 </li>
@@ -746,7 +770,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>isMetaRegion</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.529">isMetaRegion</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.550">isMetaRegion</a>()</pre>
 <div class="block">Checks if this table is <code> hbase:meta </code> region.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -762,7 +786,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>isMetaTable</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.539">isMetaTable</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.560">isMetaTable</a>()</pre>
 <div class="block">Checks if the table is a <code>hbase:meta</code> table</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -778,7 +802,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getValue</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.544">getValue</a>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.565">getValue</a>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getValue-org.apache.hadoop.hbase.util.Bytes-">TableDescriptor</a></code></span></div>
 <div class="block">Getter for accessing the metadata associated with the key.</div>
 <dl>
@@ -797,7 +821,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getValue</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/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.550">getValue</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;key)</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/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.571">getValue</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;key)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getValue-java.lang.String-">TableDescriptor</a></code></span></div>
 <div class="block">Getter for accessing the metadata associated with the key.</div>
 <dl>
@@ -816,7 +840,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getValue</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.556">getValue</a>(byte[]&nbsp;key)</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.577">getValue</a>(byte[]&nbsp;key)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getValue-byte:A-">TableDescriptor</a></code></span></div>
 <div class="block">Getter for accessing the metadata associated with the key.</div>
 <dl>
@@ -837,7 +861,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getOrDefault</h4>
-<pre>private&nbsp;&lt;T&gt;&nbsp;T&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.561">getOrDefault</a>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key,
+<pre>private&nbsp;&lt;T&gt;&nbsp;T&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.582">getOrDefault</a>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key,
                            <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="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,T&gt;&nbsp;function,
                            T&nbsp;defaultValue)</pre>
 </li>
@@ -848,7 +872,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getValues</h4>
-<pre>public&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="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>,<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.577">getValues</a>()</pre>
+<pre>public&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="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>,<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.598">getValues</a>()</pre>
 <div class="block">Getter for fetching an unmodifiable <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#values"><code>values</code></a> map.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -866,7 +890,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setValue</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.590">setValue</a>(byte[]&nbsp;key,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.611">setValue</a>(byte[]&nbsp;key,
                                                                  byte[]&nbsp;value)</pre>
 <div class="block">Setter for storing metadata as a (key, value) pair in <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#values"><code>values</code></a> map</div>
 <dl>
@@ -886,7 +910,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setValue</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.595">setValue</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;key,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.616">setValue</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;key,
                                                                  <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;value)</pre>
 </li>
 </ul>
@@ -896,7 +920,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setValue</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.604">setValue</a>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.625">setValue</a>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key,
                                                                   <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;value)</pre>
 </li>
 </ul>
@@ -906,7 +930,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setValue</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.615">setValue</a>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.636">setValue</a>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key,
                                                                  <a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;value)</pre>
 </li>
 </ul>
@@ -918,7 +942,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>toBytesOrNull</h4>
-<pre>private static&nbsp;&lt;T&gt;&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.624">toBytesOrNull</a>(T&nbsp;t,
+<pre>private static&nbsp;&lt;T&gt;&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.645">toBytesOrNull</a>(T&nbsp;t,
                                        <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;T,byte[]&gt;&nbsp;f)</pre>
 </li>
 </ul>
@@ -928,7 +952,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>removeValue</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.639">removeValue</a>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.660">removeValue</a>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key)</pre>
 <div class="block">Remove metadata represented by the key from the <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#values"><code>values</code></a> map</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -945,7 +969,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>removeValue</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.650">removeValue</a>(byte[]&nbsp;key)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.671">removeValue</a>(byte[]&nbsp;key)</pre>
 <div class="block">Remove metadata represented by the key from the <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#values"><code>values</code></a> map</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -962,7 +986,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>isReadOnly</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.662">isReadOnly</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.683">isReadOnly</a>()</pre>
 <div class="block">Check if the readOnly flag of the table is set. If the readOnly flag is
  set then the contents of the table can only be read from but not
  modified.</div>
@@ -980,7 +1004,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setReadOnly</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.676">setReadOnly</a>(boolean&nbsp;readOnly)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.697">setReadOnly</a>(boolean&nbsp;readOnly)</pre>
 <div class="block">Setting the table as read only sets all the columns in the table as read
  only. By default all tables are modifiable, but if the readOnly flag is
  set to true then the contents of the table can only be read but not
@@ -1000,7 +1024,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>isCompactionEnabled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.687">isCompactionEnabled</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.708">isCompactionEnabled</a>()</pre>
 <div class="block">Check if the compaction enable flag of the table is true. If flag is
  false then no minor/major compactions will be done in real.</div>
 <dl>
@@ -1017,7 +1041,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setCompactionEnabled</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.697">setCompactionEnabled</a>(boolean&nbsp;isEnable)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.718">setCompactionEnabled</a>(boolean&nbsp;isEnable)</pre>
 <div class="block">Setting the table compaction enable flag.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1033,7 +1057,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>isNormalizationEnabled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.708">isNormalizationEnabled</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.729">isNormalizationEnabled</a>()</pre>
 <div class="block">Check if normalization enable flag of the table is true. If flag is false
  then no region normalizer won't attempt to normalize this table.</div>
 <dl>
@@ -1044,13 +1068,47 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 </dl>
 </li>
 </ul>
+<a name="getNormalizerTargetRegionCount--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getNormalizerTargetRegionCount</h4>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.739">getNormalizerTargetRegionCount</a>()</pre>
+<div class="block">Check if there is the target region count. If so, the normalize plan will be calculated based
+ on the target region count.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getNormalizerTargetRegionCount--">getNormalizerTargetRegionCount</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a></code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>target region count after normalize done</dd>
+</dl>
+</li>
+</ul>
+<a name="getNormalizerTargetRegionSize--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getNormalizerTargetRegionSize</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.750">getNormalizerTargetRegionSize</a>()</pre>
+<div class="block">Check if there is the target region size. If so, the normalize plan will be calculated based
+ on the target region size.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getNormalizerTargetRegionSize--">getNormalizerTargetRegionSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a></code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>target region size after normalize done</dd>
+</dl>
+</li>
+</ul>
 <a name="setNormalizationEnabled-boolean-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>setNormalizationEnabled</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.718">setNormalizationEnabled</a>(boolean&nbsp;isEnable)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.760">setNormalizationEnabled</a>(boolean&nbsp;isEnable)</pre>
 <div class="block">Setting the table normalization enable flag.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1060,13 +1118,45 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 </dl>
 </li>
 </ul>
+<a name="setNormalizerTargetRegionCount-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setNormalizerTargetRegionCount</h4>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.769">setNormalizerTargetRegionCount</a>(int&nbsp;regionCount)</pre>
+<div class="block">Setting the target region count of table normalization .</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>regionCount</code> - the target region count.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the modifyable TD</dd>
+</dl>
+</li>
+</ul>
+<a name="setNormalizerTargetRegionSize-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setNormalizerTargetRegionSize</h4>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.778">setNormalizerTargetRegionSize</a>(long&nbsp;regionSize)</pre>
+<div class="block">Setting the target region size of table normalization.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>regionSize</code> - the target region size.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the modifyable TD</dd>
+</dl>
+</li>
+</ul>
 <a name="setDurability-org.apache.hadoop.hbase.client.Durability-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>setDurability</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.729">setDurability</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.789">setDurability</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability)</pre>
 <div class="block">Sets the <a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><code>Durability</code></a> setting for the table. This defaults to
  Durability.USE_DEFAULT.</div>
 <dl>
@@ -1083,7 +1173,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getDurability</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.739">getDurability</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.799">getDurability</a>()</pre>
 <div class="block">Returns the durability setting for the table.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -1099,7 +1189,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableName</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.749">getTableName</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.809">getTableName</a>()</pre>
 <div class="block">Get the name of the table</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -1115,7 +1205,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setRegionSplitPolicyClassName</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.761">setRegionSplitPolicyClassName</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;clazz)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.821">setRegionSplitPolicyClassName</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;clazz)</pre>
 <div class="block">This sets the class associated with the region split policy which
  determines when a region split should occur. The class used by default is
  defined in org.apache.hadoop.hbase.regionserver.RegionSplitPolicy</div>
@@ -1133,7 +1223,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionSplitPolicyClassName</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/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.774">getRegionSplitPolicyClassName</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/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.834">getRegionSplitPolicyClassName</a>()</pre>
 <div class="block">This gets the class associated with the region split policy which
  determines when a region split should occur. The class used by default is
  defined in org.apache.hadoop.hbase.regionserver.RegionSplitPolicy</div>
@@ -1152,7 +1242,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxFileSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.788">getMaxFileSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.848">getMaxFileSize</a>()</pre>
 <div class="block">Returns the maximum size upto which a region can grow to after which a
  region split is triggered. The region size is represented by the size of
  the biggest store file in that region.</div>
@@ -1172,7 +1262,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setMaxFileSize</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.808">setMaxFileSize</a>(long&nbsp;maxFileSize)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.868">setMaxFileSize</a>(long&nbsp;maxFileSize)</pre>
 <div class="block">Sets the maximum size upto which a region can grow to after which a
  region split is triggered. The region size is represented by the size of
  the biggest store file in that region, i.e. If the biggest store file
@@ -1198,7 +1288,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getMemStoreFlushSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.821">getMemStoreFlushSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.881">getMemStoreFlushSize</a>()</pre>
 <div class="block">Returns the size of the memstore after which a flush to filesystem is
  triggered.</div>
 <dl>
@@ -1217,7 +1307,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setMemStoreFlushSize</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.833">setMemStoreFlushSize</a>(long&nbsp;memstoreFlushSize)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.893">setMemStoreFlushSize</a>(long&nbsp;memstoreFlushSize)</pre>
 <div class="block">Represents the maximum size of the memstore after which the contents of
  the memstore are flushed to the filesystem. This defaults to a size of 64
  MB.</div>
@@ -1235,7 +1325,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setFlushPolicyClassName</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.846">setFlushPolicyClassName</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;clazz)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.906">setFlushPolicyClassName</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;clazz)</pre>
 <div class="block">This sets the class associated with the flush policy which determines
  determines the stores need to be flushed when flushing a region. The
  class used by default is defined in
@@ -1254,7 +1344,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushPolicyClassName</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/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.859">getFlushPolicyClassName</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/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.919">getFlushPolicyClassName</a>()</pre>
 <div class="block">This gets the class associated with the flush policy which determines the
  stores need to be flushed when flushing a region. The class used by
  default is defined in org.apache.hadoop.hbase.regionserver.FlushPolicy.</div>
@@ -1273,7 +1363,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setColumnFamily</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.8

<TRUNCATED>

[07/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html
index 9c54904..0a656db 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html
@@ -1371,589 +1371,581 @@
 <span class="sourceLineNo">1363</span>    assert subprocStack != null : "Called rollback with no steps executed rootProc=" + rootProc;<a name="line.1363"></a>
 <span class="sourceLineNo">1364</span><a name="line.1364"></a>
 <span class="sourceLineNo">1365</span>    int stackTail = subprocStack.size();<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>    boolean reuseLock = false;<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>    while (stackTail --&gt; 0) {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>      Procedure&lt;TEnvironment&gt; proc = subprocStack.get(stackTail);<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span><a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>      LockState lockState;<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>      if (!reuseLock &amp;&amp; (lockState = acquireLock(proc)) != LockState.LOCK_ACQUIRED) {<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>        // can't take a lock on the procedure, add the root-proc back on the<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>        // queue waiting for the lock availability<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>        return lockState;<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>      }<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span><a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      lockState = executeRollback(proc);<a name="line.1377"></a>
+<span class="sourceLineNo">1366</span>    while (stackTail-- &gt; 0) {<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>      Procedure&lt;TEnvironment&gt; proc = subprocStack.get(stackTail);<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span><a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>      LockState lockState = acquireLock(proc);<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>      if (lockState != LockState.LOCK_ACQUIRED) {<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>        // can't take a lock on the procedure, add the root-proc back on the<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>        // queue waiting for the lock availability<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>        return lockState;<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>      }<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span><a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>      lockState = executeRollback(proc);<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      releaseLock(proc, false);<a name="line.1377"></a>
 <span class="sourceLineNo">1378</span>      boolean abortRollback = lockState != LockState.LOCK_ACQUIRED;<a name="line.1378"></a>
 <span class="sourceLineNo">1379</span>      abortRollback |= !isRunning() || !store.isRunning();<a name="line.1379"></a>
 <span class="sourceLineNo">1380</span><a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      // If the next procedure is the same to this one<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      // (e.g. StateMachineProcedure reuse the same instance)<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      // we can avoid to lock/unlock each step<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>      reuseLock = stackTail &gt; 0 &amp;&amp; (subprocStack.get(stackTail - 1) == proc) &amp;&amp; !abortRollback;<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>      if (!reuseLock &amp;&amp; proc.hasLock()) {<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        releaseLock(proc, false);<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>      }<a name="line.1387"></a>
+<span class="sourceLineNo">1381</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      // useful to test the procedure recovery.<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>      if (abortRollback) {<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>        return lockState;<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>      }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span><a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>      subprocStack.remove(stackTail);<a name="line.1387"></a>
 <span class="sourceLineNo">1388</span><a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>      // useful to test the procedure recovery.<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      if (abortRollback) {<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>        return lockState;<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>      }<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span><a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>      subprocStack.remove(stackTail);<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span><a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>      if (proc.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>        return LockState.LOCK_YIELD_WAIT;<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>      }<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span><a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>      if (proc != rootProc) {<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>        execCompletionCleanup(proc);<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      }<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>    }<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span><a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    // Finalize the procedure state<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>    LOG.info("Rolled back " + rootProc +<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>             " exec-time=" + StringUtils.humanTimeDiff(rootProc.elapsedTime()));<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>    procedureFinished(rootProc);<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>    return LockState.LOCK_ACQUIRED;<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>  }<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span><a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>  /**<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>   * Execute the rollback of the procedure step.<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>   * It updates the store with the new state (stack index)<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>   * or will remove completly the procedure in case it is a child.<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>   */<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>  private LockState executeRollback(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>    try {<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>      proc.doRollback(getEnvironment());<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>    } catch (IOException e) {<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>      LOG.debug("Roll back attempt failed for {}", proc, e);<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>    } catch (InterruptedException e) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>      handleInterruptedException(proc, e);<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>    } catch (Throwable e) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>      LOG.error(HBaseMarkers.FATAL, "CODE-BUG: Uncaught runtime exception for " + proc, e);<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>    }<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span><a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>    // allows to kill the executor before something is stored to the wal.<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>    // useful to test the procedure recovery.<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>    if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate()) {<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>      String msg = "TESTING: Kill before store update";<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>      LOG.debug(msg);<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      stop();<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>      throw new RuntimeException(msg);<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    }<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span><a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>    if (proc.removeStackIndex()) {<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      proc.setState(ProcedureState.ROLLEDBACK);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span><a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      // update metrics on finishing the procedure (fail)<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>      proc.updateMetricsOnFinish(getEnvironment(), proc.elapsedTime(), false);<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span><a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>      if (proc.hasParent()) {<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>        store.delete(proc.getProcId());<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>        procedures.remove(proc.getProcId());<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      } else {<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>        final long[] childProcIds = rollbackStack.get(proc.getProcId()).getSubprocedureIds();<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>        if (childProcIds != null) {<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>          store.delete(proc, childProcIds);<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>        } else {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>          store.update(proc);<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>        }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      }<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>    } else {<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>      store.update(proc);<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    }<a name="line.1461"></a>
+<span class="sourceLineNo">1389</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>      if (proc.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        return LockState.LOCK_YIELD_WAIT;<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span><a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      if (proc != rootProc) {<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>        execCompletionCleanup(proc);<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>      }<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>    }<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span><a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>    // Finalize the procedure state<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>    LOG.info("Rolled back " + rootProc +<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>             " exec-time=" + StringUtils.humanTimeDiff(rootProc.elapsedTime()));<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>    procedureFinished(rootProc);<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>    return LockState.LOCK_ACQUIRED;<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>  }<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span><a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>  /**<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>   * Execute the rollback of the procedure step.<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>   * It updates the store with the new state (stack index)<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>   * or will remove completly the procedure in case it is a child.<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>   */<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>  private LockState executeRollback(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>    try {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>      proc.doRollback(getEnvironment());<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>    } catch (IOException e) {<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      LOG.debug("Roll back attempt failed for {}", proc, e);<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>    } catch (InterruptedException e) {<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>      handleInterruptedException(proc, e);<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>    } catch (Throwable e) {<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>      LOG.error(HBaseMarkers.FATAL, "CODE-BUG: Uncaught runtime exception for " + proc, e);<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>    }<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span><a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>    // allows to kill the executor before something is stored to the wal.<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    // useful to test the procedure recovery.<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>    if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate()) {<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>      String msg = "TESTING: Kill before store update";<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      LOG.debug(msg);<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      stop();<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>      throw new RuntimeException(msg);<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>    }<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span><a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>    if (proc.removeStackIndex()) {<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>      proc.setState(ProcedureState.ROLLEDBACK);<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span><a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>      // update metrics on finishing the procedure (fail)<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>      proc.updateMetricsOnFinish(getEnvironment(), proc.elapsedTime(), false);<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span><a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>      if (proc.hasParent()) {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>        store.delete(proc.getProcId());<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>        procedures.remove(proc.getProcId());<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      } else {<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>        final long[] childProcIds = rollbackStack.get(proc.getProcId()).getSubprocedureIds();<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>        if (childProcIds != null) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>          store.delete(proc, childProcIds);<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>        } else {<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>          store.update(proc);<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>        }<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>      }<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>    } else {<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>      store.update(proc);<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>    }<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span><a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>    return LockState.LOCK_ACQUIRED;<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>  }<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span><a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>  private void yieldProcedure(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>    releaseLock(proc, false);<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    scheduler.yield(proc);<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>  }<a name="line.1461"></a>
 <span class="sourceLineNo">1462</span><a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>    return LockState.LOCK_ACQUIRED;<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>  }<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span><a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>  private void yieldProcedure(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>    releaseLock(proc, false);<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>    scheduler.yield(proc);<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>  }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span><a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>  /**<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>   * Executes &lt;code&gt;procedure&lt;/code&gt;<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>   * &lt;ul&gt;<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>   *  &lt;li&gt;Calls the doExecute() of the procedure<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>   *  &lt;li&gt;If the procedure execution didn't fail (i.e. valid user input)<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>   *  &lt;ul&gt;<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>   *    &lt;li&gt;...and returned subprocedures<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>   *    &lt;ul&gt;&lt;li&gt;The subprocedures are initialized.<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>   *      &lt;li&gt;The subprocedures are added to the store<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>   *      &lt;li&gt;The subprocedures are added to the runnable queue<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>   *      &lt;li&gt;The procedure is now in a WAITING state, waiting for the subprocedures to complete<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>   *    &lt;/ul&gt;<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>   *    &lt;/li&gt;<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>   *   &lt;li&gt;...if there are no subprocedure<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>   *    &lt;ul&gt;&lt;li&gt;the procedure completed successfully<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>   *      &lt;li&gt;if there is a parent (WAITING)<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>   *      &lt;li&gt;the parent state will be set to RUNNABLE<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>   *    &lt;/ul&gt;<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>   *   &lt;/li&gt;<a name="line.1489"></a>
+<span class="sourceLineNo">1463</span>  /**<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>   * Executes &lt;code&gt;procedure&lt;/code&gt;<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>   * &lt;ul&gt;<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>   *  &lt;li&gt;Calls the doExecute() of the procedure<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>   *  &lt;li&gt;If the procedure execution didn't fail (i.e. valid user input)<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>   *  &lt;ul&gt;<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>   *    &lt;li&gt;...and returned subprocedures<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>   *    &lt;ul&gt;&lt;li&gt;The subprocedures are initialized.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>   *      &lt;li&gt;The subprocedures are added to the store<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>   *      &lt;li&gt;The subprocedures are added to the runnable queue<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>   *      &lt;li&gt;The procedure is now in a WAITING state, waiting for the subprocedures to complete<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>   *    &lt;/ul&gt;<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>   *    &lt;/li&gt;<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>   *   &lt;li&gt;...if there are no subprocedure<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>   *    &lt;ul&gt;&lt;li&gt;the procedure completed successfully<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>   *      &lt;li&gt;if there is a parent (WAITING)<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>   *      &lt;li&gt;the parent state will be set to RUNNABLE<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>   *    &lt;/ul&gt;<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>   *   &lt;/li&gt;<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>   *  &lt;/ul&gt;<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>   *  &lt;/li&gt;<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>   *  &lt;li&gt;In case of failure<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>   *  &lt;ul&gt;<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>   *    &lt;li&gt;The store is updated with the new state&lt;/li&gt;<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>   *    &lt;li&gt;The executor (caller of this method) will start the rollback of the procedure&lt;/li&gt;<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>   *  &lt;/ul&gt;<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>   *  &lt;/li&gt;<a name="line.1489"></a>
 <span class="sourceLineNo">1490</span>   *  &lt;/ul&gt;<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>   *  &lt;/li&gt;<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>   *  &lt;li&gt;In case of failure<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>   *  &lt;ul&gt;<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>   *    &lt;li&gt;The store is updated with the new state&lt;/li&gt;<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>   *    &lt;li&gt;The executor (caller of this method) will start the rollback of the procedure&lt;/li&gt;<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>   *  &lt;/ul&gt;<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>   *  &lt;/li&gt;<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>   *  &lt;/ul&gt;<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>   */<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  private void execProcedure(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>    Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>        "NOT RUNNABLE! " + procedure.toString());<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span><a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    // Procedures can suspend themselves. They skip out by throwing a ProcedureSuspendedException.<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    // The exception is caught below and then we hurry to the exit without disturbing state. The<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>    // idea is that the processing of this procedure will be unsuspended later by an external event<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>    // such the report of a region open.<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    boolean suspended = false;<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span><a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    // Whether to 're-' -execute; run through the loop again.<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>    boolean reExecute = false;<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span><a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    Procedure&lt;TEnvironment&gt;[] subprocs = null;<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>    do {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>      reExecute = false;<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>      try {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>        subprocs = procedure.doExecute(getEnvironment());<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>        if (subprocs != null &amp;&amp; subprocs.length == 0) {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>          subprocs = null;<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        }<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      } catch (ProcedureSuspendedException e) {<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        LOG.trace("Suspend {}", procedure);<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>        suspended = true;<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>      } catch (ProcedureYieldException e) {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>        LOG.trace("Yield {}", procedure, e);<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>        yieldProcedure(procedure);<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>        return;<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      } catch (InterruptedException e) {<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        LOG.trace("Yield interrupt {}", procedure, e);<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>        handleInterruptedException(procedure, e);<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>        yieldProcedure(procedure);<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>        return;<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>      } catch (Throwable e) {<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>        // Catch NullPointerExceptions or similar errors...<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>        String msg = "CODE-BUG: Uncaught runtime exception: " + procedure;<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>        LOG.error(msg, e);<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>        procedure.setFailure(new RemoteProcedureException(msg, e));<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>      }<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span><a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      if (!procedure.isFailed()) {<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>        if (subprocs != null) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>          if (subprocs.length == 1 &amp;&amp; subprocs[0] == procedure) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>            // Procedure returned itself. Quick-shortcut for a state machine-like procedure;<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>            // i.e. we go around this loop again rather than go back out on the scheduler queue.<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>            subprocs = null;<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>            reExecute = true;<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>            LOG.trace("Short-circuit to next step on pid={}", procedure.getProcId());<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          } else {<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>            // Yield the current procedure, and make the subprocedure runnable<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>            // subprocs may come back 'null'.<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            subprocs = initializeChildren(procStack, procedure, subprocs);<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            LOG.info("Initialized subprocedures=" +<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>              (subprocs == null? null:<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>                Stream.of(subprocs).map(e -&gt; "{" + e.toString() + "}").<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>                collect(Collectors.toList()).toString()));<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>          }<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>        } else if (procedure.getState() == ProcedureState.WAITING_TIMEOUT) {<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>          LOG.trace("Added to timeoutExecutor {}", procedure);<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>          timeoutExecutor.add(procedure);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>        } else if (!suspended) {<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>          // No subtask, so we are done<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>          procedure.setState(ProcedureState.SUCCESS);<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        }<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      }<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span><a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>      // Add the procedure to the stack<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      procStack.addRollbackStep(procedure);<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span><a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      // useful to test the procedure recovery.<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>      if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate(suspended)) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>        String msg = "TESTING: Kill before store update: " + procedure;<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>        LOG.debug(msg);<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>        stop();<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        throw new RuntimeException(msg);<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>      }<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span><a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>      //<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      // Commit the transaction even if a suspend (state may have changed). Note this append<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      // can take a bunch of time to complete.<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span><a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      // if the store is not running we are aborting<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      if (!store.isRunning()) {<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>        return;<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>      }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>        yieldProcedure(procedure);<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>        return;<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>      }<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>    } while (reExecute);<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    // Submit the new subprocedures<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>      submitChildrenProcedures(subprocs);<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>    }<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span><a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>    // we need to log the release lock operation before waking up the parent procedure, as there<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    // could be race that the parent procedure may call updateStoreOnExec ahead of us and remove all<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>    // the sub procedures from store and cause problems...<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    releaseLock(procedure, false);<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span><a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>    // if the procedure is complete and has a parent, count down the children latch.<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>    // If 'suspended', do nothing to change state -- let other threads handle unsuspend event.<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    if (!suspended &amp;&amp; procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      countDownChildren(procStack, procedure);<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span><a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>  private Procedure&lt;TEnvironment&gt;[] initializeChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    assert subprocs != null : "expected subprocedures";<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      if (subproc == null) {<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>          new IllegalArgumentIOException(msg)));<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>        return null;<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>      }<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span><a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>      subproc.setRootProcId(rootProcId);<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>      subproc.setProcId(nextProcId());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>      procStack.addSubProcedure(subproc);<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>    }<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span><a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    if (!procedure.isFailed()) {<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>      switch (procedure.getState()) {<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>        case RUNNABLE:<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>          break;<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>        case WAITING_TIMEOUT:<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>          timeoutExecutor.add(procedure);<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>          break;<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>        default:<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>          break;<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>      }<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>    }<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    return subprocs;<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>  }<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span><a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>  private void submitChildrenProcedures(Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>      subproc.updateMetricsOnSubmit(getEnvironment());<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      scheduler.addFront(subproc);<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>  }<a name="line.1663"></a>
+<span class="sourceLineNo">1491</span>   */<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>  private void execProcedure(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>    Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>        "NOT RUNNABLE! " + procedure.toString());<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span><a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>    // Procedures can suspend themselves. They skip out by throwing a ProcedureSuspendedException.<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>    // The exception is caught below and then we hurry to the exit without disturbing state. The<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>    // idea is that the processing of this procedure will be unsuspended later by an external event<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>    // such the report of a region open.<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>    boolean suspended = false;<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span><a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    // Whether to 're-' -execute; run through the loop again.<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>    boolean reExecute = false;<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span><a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>    Procedure&lt;TEnvironment&gt;[] subprocs = null;<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>    do {<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>      reExecute = false;<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      try {<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>        subprocs = procedure.doExecute(getEnvironment());<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>        if (subprocs != null &amp;&amp; subprocs.length == 0) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>          subprocs = null;<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        }<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>      } catch (ProcedureSuspendedException e) {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>        LOG.trace("Suspend {}", procedure);<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>        suspended = true;<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>      } catch (ProcedureYieldException e) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>        LOG.trace("Yield {}", procedure, e);<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>        yieldProcedure(procedure);<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>        return;<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>      } catch (InterruptedException e) {<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        LOG.trace("Yield interrupt {}", procedure, e);<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>        handleInterruptedException(procedure, e);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>        yieldProcedure(procedure);<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>        return;<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      } catch (Throwable e) {<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>        // Catch NullPointerExceptions or similar errors...<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>        String msg = "CODE-BUG: Uncaught runtime exception: " + procedure;<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>        LOG.error(msg, e);<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>        procedure.setFailure(new RemoteProcedureException(msg, e));<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>      }<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span><a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      if (!procedure.isFailed()) {<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>        if (subprocs != null) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>          if (subprocs.length == 1 &amp;&amp; subprocs[0] == procedure) {<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>            // Procedure returned itself. Quick-shortcut for a state machine-like procedure;<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>            // i.e. we go around this loop again rather than go back out on the scheduler queue.<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>            subprocs = null;<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>            reExecute = true;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>            LOG.trace("Short-circuit to next step on pid={}", procedure.getProcId());<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>          } else {<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>            // Yield the current procedure, and make the subprocedure runnable<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>            // subprocs may come back 'null'.<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>            subprocs = initializeChildren(procStack, procedure, subprocs);<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>            LOG.info("Initialized subprocedures=" +<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>              (subprocs == null? null:<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>                Stream.of(subprocs).map(e -&gt; "{" + e.toString() + "}").<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>                collect(Collectors.toList()).toString()));<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>          }<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>        } else if (procedure.getState() == ProcedureState.WAITING_TIMEOUT) {<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>          LOG.trace("Added to timeoutExecutor {}", procedure);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>          timeoutExecutor.add(procedure);<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>        } else if (!suspended) {<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          // No subtask, so we are done<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          procedure.setState(ProcedureState.SUCCESS);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>        }<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>      }<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span><a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>      // Add the procedure to the stack<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>      procStack.addRollbackStep(procedure);<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span><a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>      // useful to test the procedure recovery.<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>      if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate(suspended)) {<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>        String msg = "TESTING: Kill before store update: " + procedure;<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        LOG.debug(msg);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>        stop();<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>        throw new RuntimeException(msg);<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>      }<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span><a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      //<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>      // Commit the transaction even if a suspend (state may have changed). Note this append<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>      // can take a bunch of time to complete.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span><a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      // if the store is not running we are aborting<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>      if (!store.isRunning()) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>        return;<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>      }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>        yieldProcedure(procedure);<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>        return;<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>      }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>    } while (reExecute);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>    // Submit the new subprocedures<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      submitChildrenProcedures(subprocs);<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>    }<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span><a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    // we need to log the release lock operation before waking up the parent procedure, as there<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    // could be race that the parent procedure may call updateStoreOnExec ahead of us and remove all<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    // the sub procedures from store and cause problems...<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    releaseLock(procedure, false);<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span><a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    // if the procedure is complete and has a parent, count down the children latch.<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>    // If 'suspended', do nothing to change state -- let other threads handle unsuspend event.<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    if (!suspended &amp;&amp; procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      countDownChildren(procStack, procedure);<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>    }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>  }<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span><a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>  private Procedure&lt;TEnvironment&gt;[] initializeChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    assert subprocs != null : "expected subprocedures";<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>      if (subproc == null) {<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>          new IllegalArgumentIOException(msg)));<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>        return null;<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>      }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span><a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      subproc.setRootProcId(rootProcId);<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      subproc.setProcId(nextProcId());<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      procStack.addSubProcedure(subproc);<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>    }<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span><a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>    if (!procedure.isFailed()) {<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>      switch (procedure.getState()) {<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>        case RUNNABLE:<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>          break;<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        case WAITING_TIMEOUT:<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>          timeoutExecutor.add(procedure);<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>          break;<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>        default:<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          break;<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>      }<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>    }<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    return subprocs;<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>  }<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span><a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>  private void submitChildrenProcedures(Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>      subproc.updateMetricsOnSubmit(getEnvironment());<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>      scheduler.addFront(subproc);<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    }<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>  }<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span><a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>  private void countDownChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    Procedure&lt;TEnvironment&gt; parent = procedures.get(procedure.getParentProcId());<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    if (parent == null) {<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>      assert procStack.isRollingback();<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>      return;<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    }<a name="line.1663"></a>
 <span class="sourceLineNo">1664</span><a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>  private void countDownChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>    Procedure&lt;TEnvironment&gt; parent = procedures.get(procedure.getParentProcId());<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    if (parent == null) {<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      assert procStack.isRollingback();<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>      return;<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>    }<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span><a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>    // If this procedure is the last child awake the parent procedure<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>    if (parent.tryRunnable()) {<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>      // If we succeeded in making the parent runnable -- i.e. all of its<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      // children have completed, move parent to front of the queue.<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      store.update(parent);<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      scheduler.addFront(parent);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      LOG.info("Finished subprocedure(s) of " + parent + "; resume parent processing.");<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>      return;<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>    }<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>  }<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span><a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>  private void updateStoreOnExec(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>      if (LOG.isTraceEnabled()) {<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>      }<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      store.insert(procedure, subprocs);<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>    } else {<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      LOG.trace("Store update {}", procedure);<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>        // remove child procedures<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        if (childProcIds != null) {<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>          store.delete(procedure, childProcIds);<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>            procedures.remove(childProcIds[i]);<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>          }<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>        } else {<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>          store.update(procedure);<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      } else {<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        store.update(procedure);<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>      }<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>    }<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>  }<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span><a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>  private void handleInterruptedException(Procedure&lt;TEnvironment&gt; proc, InterruptedException e) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>    LOG.trace("Interrupt during {}. suspend and retry it later.", proc, e);<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>    // and the executor/store will be stopped.<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>  }<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span><a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>  private void execCompletionCleanup(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    final TEnvironment env = getEnvironment();<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>    if (proc.hasLock()) {<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>      LOG.warn("Usually this should not happen, we will release the lock before if the procedure" +<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>        " is finished, even if the holdLock is true, arrive here means we have some holes where" +<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        " we do not release the lock. And the releaseLock below may fail since the procedure may" +<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>        " have already been deleted from the procedure store.");<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>      releaseLock(proc, true);<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>    }<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>    try {<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>      proc.completionCleanup(env);<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>    } catch (Throwable e) {<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>    }<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>  }<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span><a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>  private void procedureFinished(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>    // call the procedure completion cleanup handler<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>    execCompletionCleanup(proc);<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span><a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>    CompletedProcedureRetainer&lt;TEnvironment&gt; retainer = new CompletedProcedureRetainer&lt;&gt;(proc);<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span><a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>    // update the executor internal state maps<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>      retainer.setClientAckTime(0);<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>    }<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span><a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>    completed.put(proc.getProcId(), retainer);<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>    rollbackStack.remove(proc.getProcId());<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    procedures.remove(proc.getProcId());<a name="line.1749"></a>
+<span class="sourceLineNo">1665</span>    // If this procedure is the last child awake the parent procedure<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>    if (parent.tryRunnable()) {<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>      // If we succeeded in making the parent runnable -- i.e. all of its<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      // children have completed, move parent to front of the queue.<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>      store.update(parent);<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>      scheduler.addFront(parent);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      LOG.info("Finished subprocedure(s) of " + parent + "; resume parent processing.");<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>      return;<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>    }<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>  }<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span><a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>  private void updateStoreOnExec(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      if (LOG.isTraceEnabled()) {<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>      }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      store.insert(procedure, subprocs);<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>    } else {<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      LOG.trace("Store update {}", procedure);<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>        // remove child procedures<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>        if (childProcIds != null) {<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>          store.delete(procedure, childProcIds);<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>            procedures.remove(childProcIds[i]);<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>          }<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>        } else {<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>          store.update(procedure);<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>        }<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>      } else {<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>        store.update(procedure);<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      }<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>    }<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>  }<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span><a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>  private void handleInterruptedException(Procedure&lt;TEnvironment&gt; proc, InterruptedException e) {<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>    LOG.trace("Interrupt during {}. suspend and retry it later.", proc, e);<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>    // and the executor/store will be stopped.<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>  }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span><a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  private void execCompletionCleanup(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>    final TEnvironment env = getEnvironment();<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>    if (proc.hasLock()) {<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      LOG.warn("Usually this should not happen, we will release the lock before if the procedure" +<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>        " is finished, even if the holdLock is true, arrive here means we have some holes where" +<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        " we do not release the lock. And the releaseLock below may fail since the procedure may" +<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        " have already been deleted from the procedure store.");<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      releaseLock(proc, true);<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>    }<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>    try {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>      proc.completionCleanup(env);<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>    } catch (Throwable e) {<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>    }<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>  }<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span><a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>  private void procedureFinished(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    // call the procedure completion cleanup handler<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>    execCompletionCleanup(proc);<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span><a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>    CompletedProcedureRetainer&lt;TEnvironment&gt; retainer = new CompletedProcedureRetainer&lt;&gt;(proc);<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span><a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>    // update the executor internal state maps<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>      retainer.setClientAckTime(0);<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>    }<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span><a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>    completed.put(proc.getProcId(), retainer);<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>    rollbackStack.remove(proc.getProcId());<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>    procedures.remove(proc.getProcId());<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span><a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>    // call the runnableSet completion cleanup handler<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>    try {<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>      scheduler.completionCleanup(proc);<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>    } catch (Throwable e) {<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: {}", proc, e);<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
 <span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    // call the runnableSet completion cleanup handler<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    try {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      scheduler.completionCleanup(proc);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>    } catch (Throwable e) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: {}", proc, e);<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>    }<a name="line.1757"></a>
+<span class="sourceLineNo">1751</span>    // Notify the listeners<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>  }<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span><a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>  RootProcedureState&lt;TEnvironment&gt; getProcStack(long rootProcId) {<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    return rollbackStack.get(rootProcId);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>  }<a name="line.1757"></a>
 <span class="sourceLineNo">1758</span><a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>    // Notify the listeners<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span><a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>  RootProcedureState&lt;TEnvironment&gt; getProcStack(long rootProcId) {<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>    return rollbackStack.get(rootProcId);<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  }<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>  // ==========================================================================<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>  //  Worker Thread<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>  // ==========================================================================<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>  private class WorkerThread extends StoppableThread {<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    private volatile Procedure&lt;TEnvironment&gt; activeProcedure;<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    public WorkerThread(ThreadGroup group) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      this(group, "PEWorker-");<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    }<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span><a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    protected WorkerThread(ThreadGroup group, String prefix) {<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>      super(group, prefix + workerId.incrementAndGet());<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>      setDaemon(true);<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span><a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>    @Override<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    public void sendStopSignal() {<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      scheduler.signalAll();<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    }<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span><a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>    @Override<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>    public void run() {<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      try {<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>        while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>          Procedure&lt;TEnvironment&gt; proc = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>          if (proc == null) {<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>            continue;<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>          }<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>          this.activeProcedure = proc;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>          int activeCount = activeExecutorCount.incrementAndGet();<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>          int runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>          LOG.trace("Execute pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>            runningCount, activeCount);<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>          executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>          IdLock.Entry lockEntry = procExecutionLock.getLockEntry(proc.getProcId());<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>          try {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>            executeProcedure(proc);<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>          } catch (AssertionError e) {<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            LOG.info("ASSERT pid=" + proc.getProcId(), e);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            throw e;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          } finally {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>            procExecutionLock.releaseLockEntry(lockEntry);<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>            activeCount = activeExecutorCount.decrementAndGet();<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>            runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>            LOG.trace("Halt pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>              runningCount, activeCount);<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>            this.activeProcedure = null;<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>            lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>            executionStartTime.set(Long.MAX_VALUE);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>          }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>        }<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>      } catch (Throwable t) {<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        LOG.warn("Worker terminating UNNATURALLY {}", this.activeProcedure, t);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>      } finally {<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        LOG.trace("Worker terminated.");<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>      }<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>      workerThreads.remove(this);<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    }<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    @Override<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    public String toString() {<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      Procedure&lt;?&gt; p = this.activeProcedure;<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>      return getName() + "(pid=" + (p == null? Procedure.NO_PROC_ID: p.getProcId() + ")");<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>    }<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span><a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    /**<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>     * @return the time since the current procedure is running<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>     */<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    public long getCurrentRunTime() {<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>    }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span><a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    // core worker never timeout<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.1842"></a>
-<span class="sourceLineNo">1843</spa

<TRUNCATED>

[06/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.Testing.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.Testing.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.Testing.html
index 9c54904..0a656db 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.Testing.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.Testing.html
@@ -1371,589 +1371,581 @@
 <span class="sourceLineNo">1363</span>    assert subprocStack != null : "Called rollback with no steps executed rootProc=" + rootProc;<a name="line.1363"></a>
 <span class="sourceLineNo">1364</span><a name="line.1364"></a>
 <span class="sourceLineNo">1365</span>    int stackTail = subprocStack.size();<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>    boolean reuseLock = false;<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>    while (stackTail --&gt; 0) {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>      Procedure&lt;TEnvironment&gt; proc = subprocStack.get(stackTail);<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span><a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>      LockState lockState;<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>      if (!reuseLock &amp;&amp; (lockState = acquireLock(proc)) != LockState.LOCK_ACQUIRED) {<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>        // can't take a lock on the procedure, add the root-proc back on the<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>        // queue waiting for the lock availability<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>        return lockState;<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>      }<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span><a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      lockState = executeRollback(proc);<a name="line.1377"></a>
+<span class="sourceLineNo">1366</span>    while (stackTail-- &gt; 0) {<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>      Procedure&lt;TEnvironment&gt; proc = subprocStack.get(stackTail);<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span><a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>      LockState lockState = acquireLock(proc);<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>      if (lockState != LockState.LOCK_ACQUIRED) {<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>        // can't take a lock on the procedure, add the root-proc back on the<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>        // queue waiting for the lock availability<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>        return lockState;<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>      }<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span><a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>      lockState = executeRollback(proc);<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      releaseLock(proc, false);<a name="line.1377"></a>
 <span class="sourceLineNo">1378</span>      boolean abortRollback = lockState != LockState.LOCK_ACQUIRED;<a name="line.1378"></a>
 <span class="sourceLineNo">1379</span>      abortRollback |= !isRunning() || !store.isRunning();<a name="line.1379"></a>
 <span class="sourceLineNo">1380</span><a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      // If the next procedure is the same to this one<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      // (e.g. StateMachineProcedure reuse the same instance)<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      // we can avoid to lock/unlock each step<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>      reuseLock = stackTail &gt; 0 &amp;&amp; (subprocStack.get(stackTail - 1) == proc) &amp;&amp; !abortRollback;<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>      if (!reuseLock &amp;&amp; proc.hasLock()) {<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        releaseLock(proc, false);<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>      }<a name="line.1387"></a>
+<span class="sourceLineNo">1381</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      // useful to test the procedure recovery.<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>      if (abortRollback) {<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>        return lockState;<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>      }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span><a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>      subprocStack.remove(stackTail);<a name="line.1387"></a>
 <span class="sourceLineNo">1388</span><a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>      // useful to test the procedure recovery.<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      if (abortRollback) {<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>        return lockState;<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>      }<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span><a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>      subprocStack.remove(stackTail);<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span><a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>      if (proc.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>        return LockState.LOCK_YIELD_WAIT;<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>      }<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span><a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>      if (proc != rootProc) {<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>        execCompletionCleanup(proc);<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      }<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>    }<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span><a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    // Finalize the procedure state<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>    LOG.info("Rolled back " + rootProc +<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>             " exec-time=" + StringUtils.humanTimeDiff(rootProc.elapsedTime()));<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>    procedureFinished(rootProc);<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>    return LockState.LOCK_ACQUIRED;<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>  }<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span><a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>  /**<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>   * Execute the rollback of the procedure step.<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>   * It updates the store with the new state (stack index)<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>   * or will remove completly the procedure in case it is a child.<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>   */<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>  private LockState executeRollback(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>    try {<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>      proc.doRollback(getEnvironment());<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>    } catch (IOException e) {<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>      LOG.debug("Roll back attempt failed for {}", proc, e);<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>    } catch (InterruptedException e) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>      handleInterruptedException(proc, e);<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>    } catch (Throwable e) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>      LOG.error(HBaseMarkers.FATAL, "CODE-BUG: Uncaught runtime exception for " + proc, e);<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>    }<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span><a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>    // allows to kill the executor before something is stored to the wal.<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>    // useful to test the procedure recovery.<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>    if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate()) {<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>      String msg = "TESTING: Kill before store update";<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>      LOG.debug(msg);<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      stop();<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>      throw new RuntimeException(msg);<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    }<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span><a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>    if (proc.removeStackIndex()) {<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      proc.setState(ProcedureState.ROLLEDBACK);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span><a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      // update metrics on finishing the procedure (fail)<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>      proc.updateMetricsOnFinish(getEnvironment(), proc.elapsedTime(), false);<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span><a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>      if (proc.hasParent()) {<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>        store.delete(proc.getProcId());<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>        procedures.remove(proc.getProcId());<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      } else {<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>        final long[] childProcIds = rollbackStack.get(proc.getProcId()).getSubprocedureIds();<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>        if (childProcIds != null) {<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>          store.delete(proc, childProcIds);<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>        } else {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>          store.update(proc);<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>        }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      }<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>    } else {<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>      store.update(proc);<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    }<a name="line.1461"></a>
+<span class="sourceLineNo">1389</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>      if (proc.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        return LockState.LOCK_YIELD_WAIT;<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span><a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      if (proc != rootProc) {<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>        execCompletionCleanup(proc);<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>      }<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>    }<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span><a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>    // Finalize the procedure state<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>    LOG.info("Rolled back " + rootProc +<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>             " exec-time=" + StringUtils.humanTimeDiff(rootProc.elapsedTime()));<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>    procedureFinished(rootProc);<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>    return LockState.LOCK_ACQUIRED;<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>  }<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span><a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>  /**<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>   * Execute the rollback of the procedure step.<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>   * It updates the store with the new state (stack index)<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>   * or will remove completly the procedure in case it is a child.<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>   */<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>  private LockState executeRollback(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>    try {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>      proc.doRollback(getEnvironment());<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>    } catch (IOException e) {<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      LOG.debug("Roll back attempt failed for {}", proc, e);<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>    } catch (InterruptedException e) {<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>      handleInterruptedException(proc, e);<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>    } catch (Throwable e) {<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>      LOG.error(HBaseMarkers.FATAL, "CODE-BUG: Uncaught runtime exception for " + proc, e);<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>    }<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span><a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>    // allows to kill the executor before something is stored to the wal.<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    // useful to test the procedure recovery.<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>    if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate()) {<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>      String msg = "TESTING: Kill before store update";<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      LOG.debug(msg);<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      stop();<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>      throw new RuntimeException(msg);<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>    }<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span><a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>    if (proc.removeStackIndex()) {<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>      proc.setState(ProcedureState.ROLLEDBACK);<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span><a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>      // update metrics on finishing the procedure (fail)<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>      proc.updateMetricsOnFinish(getEnvironment(), proc.elapsedTime(), false);<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span><a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>      if (proc.hasParent()) {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>        store.delete(proc.getProcId());<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>        procedures.remove(proc.getProcId());<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      } else {<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>        final long[] childProcIds = rollbackStack.get(proc.getProcId()).getSubprocedureIds();<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>        if (childProcIds != null) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>          store.delete(proc, childProcIds);<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>        } else {<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>          store.update(proc);<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>        }<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>      }<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>    } else {<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>      store.update(proc);<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>    }<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span><a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>    return LockState.LOCK_ACQUIRED;<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>  }<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span><a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>  private void yieldProcedure(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>    releaseLock(proc, false);<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    scheduler.yield(proc);<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>  }<a name="line.1461"></a>
 <span class="sourceLineNo">1462</span><a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>    return LockState.LOCK_ACQUIRED;<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>  }<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span><a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>  private void yieldProcedure(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>    releaseLock(proc, false);<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>    scheduler.yield(proc);<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>  }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span><a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>  /**<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>   * Executes &lt;code&gt;procedure&lt;/code&gt;<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>   * &lt;ul&gt;<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>   *  &lt;li&gt;Calls the doExecute() of the procedure<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>   *  &lt;li&gt;If the procedure execution didn't fail (i.e. valid user input)<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>   *  &lt;ul&gt;<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>   *    &lt;li&gt;...and returned subprocedures<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>   *    &lt;ul&gt;&lt;li&gt;The subprocedures are initialized.<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>   *      &lt;li&gt;The subprocedures are added to the store<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>   *      &lt;li&gt;The subprocedures are added to the runnable queue<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>   *      &lt;li&gt;The procedure is now in a WAITING state, waiting for the subprocedures to complete<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>   *    &lt;/ul&gt;<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>   *    &lt;/li&gt;<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>   *   &lt;li&gt;...if there are no subprocedure<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>   *    &lt;ul&gt;&lt;li&gt;the procedure completed successfully<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>   *      &lt;li&gt;if there is a parent (WAITING)<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>   *      &lt;li&gt;the parent state will be set to RUNNABLE<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>   *    &lt;/ul&gt;<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>   *   &lt;/li&gt;<a name="line.1489"></a>
+<span class="sourceLineNo">1463</span>  /**<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>   * Executes &lt;code&gt;procedure&lt;/code&gt;<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>   * &lt;ul&gt;<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>   *  &lt;li&gt;Calls the doExecute() of the procedure<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>   *  &lt;li&gt;If the procedure execution didn't fail (i.e. valid user input)<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>   *  &lt;ul&gt;<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>   *    &lt;li&gt;...and returned subprocedures<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>   *    &lt;ul&gt;&lt;li&gt;The subprocedures are initialized.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>   *      &lt;li&gt;The subprocedures are added to the store<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>   *      &lt;li&gt;The subprocedures are added to the runnable queue<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>   *      &lt;li&gt;The procedure is now in a WAITING state, waiting for the subprocedures to complete<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>   *    &lt;/ul&gt;<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>   *    &lt;/li&gt;<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>   *   &lt;li&gt;...if there are no subprocedure<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>   *    &lt;ul&gt;&lt;li&gt;the procedure completed successfully<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>   *      &lt;li&gt;if there is a parent (WAITING)<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>   *      &lt;li&gt;the parent state will be set to RUNNABLE<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>   *    &lt;/ul&gt;<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>   *   &lt;/li&gt;<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>   *  &lt;/ul&gt;<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>   *  &lt;/li&gt;<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>   *  &lt;li&gt;In case of failure<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>   *  &lt;ul&gt;<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>   *    &lt;li&gt;The store is updated with the new state&lt;/li&gt;<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>   *    &lt;li&gt;The executor (caller of this method) will start the rollback of the procedure&lt;/li&gt;<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>   *  &lt;/ul&gt;<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>   *  &lt;/li&gt;<a name="line.1489"></a>
 <span class="sourceLineNo">1490</span>   *  &lt;/ul&gt;<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>   *  &lt;/li&gt;<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>   *  &lt;li&gt;In case of failure<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>   *  &lt;ul&gt;<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>   *    &lt;li&gt;The store is updated with the new state&lt;/li&gt;<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>   *    &lt;li&gt;The executor (caller of this method) will start the rollback of the procedure&lt;/li&gt;<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>   *  &lt;/ul&gt;<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>   *  &lt;/li&gt;<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>   *  &lt;/ul&gt;<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>   */<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  private void execProcedure(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>    Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>        "NOT RUNNABLE! " + procedure.toString());<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span><a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    // Procedures can suspend themselves. They skip out by throwing a ProcedureSuspendedException.<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    // The exception is caught below and then we hurry to the exit without disturbing state. The<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>    // idea is that the processing of this procedure will be unsuspended later by an external event<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>    // such the report of a region open.<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    boolean suspended = false;<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span><a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    // Whether to 're-' -execute; run through the loop again.<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>    boolean reExecute = false;<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span><a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    Procedure&lt;TEnvironment&gt;[] subprocs = null;<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>    do {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>      reExecute = false;<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>      try {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>        subprocs = procedure.doExecute(getEnvironment());<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>        if (subprocs != null &amp;&amp; subprocs.length == 0) {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>          subprocs = null;<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        }<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      } catch (ProcedureSuspendedException e) {<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        LOG.trace("Suspend {}", procedure);<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>        suspended = true;<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>      } catch (ProcedureYieldException e) {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>        LOG.trace("Yield {}", procedure, e);<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>        yieldProcedure(procedure);<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>        return;<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      } catch (InterruptedException e) {<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        LOG.trace("Yield interrupt {}", procedure, e);<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>        handleInterruptedException(procedure, e);<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>        yieldProcedure(procedure);<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>        return;<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>      } catch (Throwable e) {<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>        // Catch NullPointerExceptions or similar errors...<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>        String msg = "CODE-BUG: Uncaught runtime exception: " + procedure;<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>        LOG.error(msg, e);<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>        procedure.setFailure(new RemoteProcedureException(msg, e));<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>      }<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span><a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      if (!procedure.isFailed()) {<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>        if (subprocs != null) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>          if (subprocs.length == 1 &amp;&amp; subprocs[0] == procedure) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>            // Procedure returned itself. Quick-shortcut for a state machine-like procedure;<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>            // i.e. we go around this loop again rather than go back out on the scheduler queue.<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>            subprocs = null;<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>            reExecute = true;<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>            LOG.trace("Short-circuit to next step on pid={}", procedure.getProcId());<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          } else {<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>            // Yield the current procedure, and make the subprocedure runnable<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>            // subprocs may come back 'null'.<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            subprocs = initializeChildren(procStack, procedure, subprocs);<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            LOG.info("Initialized subprocedures=" +<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>              (subprocs == null? null:<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>                Stream.of(subprocs).map(e -&gt; "{" + e.toString() + "}").<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>                collect(Collectors.toList()).toString()));<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>          }<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>        } else if (procedure.getState() == ProcedureState.WAITING_TIMEOUT) {<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>          LOG.trace("Added to timeoutExecutor {}", procedure);<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>          timeoutExecutor.add(procedure);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>        } else if (!suspended) {<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>          // No subtask, so we are done<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>          procedure.setState(ProcedureState.SUCCESS);<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        }<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      }<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span><a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>      // Add the procedure to the stack<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      procStack.addRollbackStep(procedure);<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span><a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      // useful to test the procedure recovery.<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>      if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate(suspended)) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>        String msg = "TESTING: Kill before store update: " + procedure;<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>        LOG.debug(msg);<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>        stop();<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        throw new RuntimeException(msg);<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>      }<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span><a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>      //<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      // Commit the transaction even if a suspend (state may have changed). Note this append<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      // can take a bunch of time to complete.<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span><a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      // if the store is not running we are aborting<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      if (!store.isRunning()) {<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>        return;<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>      }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>        yieldProcedure(procedure);<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>        return;<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>      }<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>    } while (reExecute);<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    // Submit the new subprocedures<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>      submitChildrenProcedures(subprocs);<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>    }<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span><a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>    // we need to log the release lock operation before waking up the parent procedure, as there<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    // could be race that the parent procedure may call updateStoreOnExec ahead of us and remove all<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>    // the sub procedures from store and cause problems...<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    releaseLock(procedure, false);<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span><a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>    // if the procedure is complete and has a parent, count down the children latch.<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>    // If 'suspended', do nothing to change state -- let other threads handle unsuspend event.<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    if (!suspended &amp;&amp; procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      countDownChildren(procStack, procedure);<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span><a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>  private Procedure&lt;TEnvironment&gt;[] initializeChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    assert subprocs != null : "expected subprocedures";<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      if (subproc == null) {<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>          new IllegalArgumentIOException(msg)));<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>        return null;<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>      }<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span><a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>      subproc.setRootProcId(rootProcId);<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>      subproc.setProcId(nextProcId());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>      procStack.addSubProcedure(subproc);<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>    }<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span><a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    if (!procedure.isFailed()) {<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>      switch (procedure.getState()) {<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>        case RUNNABLE:<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>          break;<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>        case WAITING_TIMEOUT:<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>          timeoutExecutor.add(procedure);<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>          break;<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>        default:<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>          break;<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>      }<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>    }<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    return subprocs;<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>  }<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span><a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>  private void submitChildrenProcedures(Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>      subproc.updateMetricsOnSubmit(getEnvironment());<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      scheduler.addFront(subproc);<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>  }<a name="line.1663"></a>
+<span class="sourceLineNo">1491</span>   */<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>  private void execProcedure(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>    Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>        "NOT RUNNABLE! " + procedure.toString());<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span><a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>    // Procedures can suspend themselves. They skip out by throwing a ProcedureSuspendedException.<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>    // The exception is caught below and then we hurry to the exit without disturbing state. The<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>    // idea is that the processing of this procedure will be unsuspended later by an external event<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>    // such the report of a region open.<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>    boolean suspended = false;<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span><a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    // Whether to 're-' -execute; run through the loop again.<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>    boolean reExecute = false;<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span><a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>    Procedure&lt;TEnvironment&gt;[] subprocs = null;<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>    do {<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>      reExecute = false;<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      try {<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>        subprocs = procedure.doExecute(getEnvironment());<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>        if (subprocs != null &amp;&amp; subprocs.length == 0) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>          subprocs = null;<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        }<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>      } catch (ProcedureSuspendedException e) {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>        LOG.trace("Suspend {}", procedure);<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>        suspended = true;<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>      } catch (ProcedureYieldException e) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>        LOG.trace("Yield {}", procedure, e);<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>        yieldProcedure(procedure);<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>        return;<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>      } catch (InterruptedException e) {<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        LOG.trace("Yield interrupt {}", procedure, e);<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>        handleInterruptedException(procedure, e);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>        yieldProcedure(procedure);<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>        return;<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      } catch (Throwable e) {<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>        // Catch NullPointerExceptions or similar errors...<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>        String msg = "CODE-BUG: Uncaught runtime exception: " + procedure;<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>        LOG.error(msg, e);<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>        procedure.setFailure(new RemoteProcedureException(msg, e));<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>      }<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span><a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      if (!procedure.isFailed()) {<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>        if (subprocs != null) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>          if (subprocs.length == 1 &amp;&amp; subprocs[0] == procedure) {<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>            // Procedure returned itself. Quick-shortcut for a state machine-like procedure;<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>            // i.e. we go around this loop again rather than go back out on the scheduler queue.<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>            subprocs = null;<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>            reExecute = true;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>            LOG.trace("Short-circuit to next step on pid={}", procedure.getProcId());<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>          } else {<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>            // Yield the current procedure, and make the subprocedure runnable<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>            // subprocs may come back 'null'.<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>            subprocs = initializeChildren(procStack, procedure, subprocs);<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>            LOG.info("Initialized subprocedures=" +<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>              (subprocs == null? null:<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>                Stream.of(subprocs).map(e -&gt; "{" + e.toString() + "}").<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>                collect(Collectors.toList()).toString()));<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>          }<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>        } else if (procedure.getState() == ProcedureState.WAITING_TIMEOUT) {<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>          LOG.trace("Added to timeoutExecutor {}", procedure);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>          timeoutExecutor.add(procedure);<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>        } else if (!suspended) {<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          // No subtask, so we are done<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          procedure.setState(ProcedureState.SUCCESS);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>        }<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>      }<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span><a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>      // Add the procedure to the stack<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>      procStack.addRollbackStep(procedure);<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span><a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>      // useful to test the procedure recovery.<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>      if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate(suspended)) {<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>        String msg = "TESTING: Kill before store update: " + procedure;<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        LOG.debug(msg);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>        stop();<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>        throw new RuntimeException(msg);<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>      }<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span><a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      //<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>      // Commit the transaction even if a suspend (state may have changed). Note this append<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>      // can take a bunch of time to complete.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span><a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      // if the store is not running we are aborting<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>      if (!store.isRunning()) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>        return;<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>      }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>        yieldProcedure(procedure);<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>        return;<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>      }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>    } while (reExecute);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>    // Submit the new subprocedures<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      submitChildrenProcedures(subprocs);<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>    }<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span><a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    // we need to log the release lock operation before waking up the parent procedure, as there<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    // could be race that the parent procedure may call updateStoreOnExec ahead of us and remove all<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    // the sub procedures from store and cause problems...<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    releaseLock(procedure, false);<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span><a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    // if the procedure is complete and has a parent, count down the children latch.<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>    // If 'suspended', do nothing to change state -- let other threads handle unsuspend event.<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    if (!suspended &amp;&amp; procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      countDownChildren(procStack, procedure);<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>    }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>  }<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span><a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>  private Procedure&lt;TEnvironment&gt;[] initializeChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    assert subprocs != null : "expected subprocedures";<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>      if (subproc == null) {<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>          new IllegalArgumentIOException(msg)));<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>        return null;<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>      }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span><a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      subproc.setRootProcId(rootProcId);<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      subproc.setProcId(nextProcId());<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      procStack.addSubProcedure(subproc);<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>    }<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span><a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>    if (!procedure.isFailed()) {<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>      switch (procedure.getState()) {<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>        case RUNNABLE:<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>          break;<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        case WAITING_TIMEOUT:<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>          timeoutExecutor.add(procedure);<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>          break;<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>        default:<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          break;<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>      }<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>    }<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    return subprocs;<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>  }<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span><a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>  private void submitChildrenProcedures(Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>      subproc.updateMetricsOnSubmit(getEnvironment());<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>      scheduler.addFront(subproc);<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    }<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>  }<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span><a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>  private void countDownChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    Procedure&lt;TEnvironment&gt; parent = procedures.get(procedure.getParentProcId());<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    if (parent == null) {<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>      assert procStack.isRollingback();<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>      return;<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    }<a name="line.1663"></a>
 <span class="sourceLineNo">1664</span><a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>  private void countDownChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>    Procedure&lt;TEnvironment&gt; parent = procedures.get(procedure.getParentProcId());<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    if (parent == null) {<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      assert procStack.isRollingback();<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>      return;<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>    }<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span><a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>    // If this procedure is the last child awake the parent procedure<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>    if (parent.tryRunnable()) {<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>      // If we succeeded in making the parent runnable -- i.e. all of its<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      // children have completed, move parent to front of the queue.<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      store.update(parent);<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      scheduler.addFront(parent);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      LOG.info("Finished subprocedure(s) of " + parent + "; resume parent processing.");<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>      return;<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>    }<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>  }<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span><a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>  private void updateStoreOnExec(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>      if (LOG.isTraceEnabled()) {<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>      }<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      store.insert(procedure, subprocs);<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>    } else {<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      LOG.trace("Store update {}", procedure);<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>        // remove child procedures<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        if (childProcIds != null) {<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>          store.delete(procedure, childProcIds);<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>            procedures.remove(childProcIds[i]);<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>          }<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>        } else {<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>          store.update(procedure);<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      } else {<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        store.update(procedure);<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>      }<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>    }<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>  }<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span><a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>  private void handleInterruptedException(Procedure&lt;TEnvironment&gt; proc, InterruptedException e) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>    LOG.trace("Interrupt during {}. suspend and retry it later.", proc, e);<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>    // and the executor/store will be stopped.<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>  }<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span><a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>  private void execCompletionCleanup(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    final TEnvironment env = getEnvironment();<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>    if (proc.hasLock()) {<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>      LOG.warn("Usually this should not happen, we will release the lock before if the procedure" +<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>        " is finished, even if the holdLock is true, arrive here means we have some holes where" +<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        " we do not release the lock. And the releaseLock below may fail since the procedure may" +<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>        " have already been deleted from the procedure store.");<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>      releaseLock(proc, true);<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>    }<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>    try {<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>      proc.completionCleanup(env);<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>    } catch (Throwable e) {<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>    }<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>  }<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span><a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>  private void procedureFinished(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>    // call the procedure completion cleanup handler<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>    execCompletionCleanup(proc);<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span><a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>    CompletedProcedureRetainer&lt;TEnvironment&gt; retainer = new CompletedProcedureRetainer&lt;&gt;(proc);<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span><a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>    // update the executor internal state maps<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>      retainer.setClientAckTime(0);<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>    }<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span><a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>    completed.put(proc.getProcId(), retainer);<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>    rollbackStack.remove(proc.getProcId());<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    procedures.remove(proc.getProcId());<a name="line.1749"></a>
+<span class="sourceLineNo">1665</span>    // If this procedure is the last child awake the parent procedure<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>    if (parent.tryRunnable()) {<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>      // If we succeeded in making the parent runnable -- i.e. all of its<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      // children have completed, move parent to front of the queue.<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>      store.update(parent);<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>      scheduler.addFront(parent);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      LOG.info("Finished subprocedure(s) of " + parent + "; resume parent processing.");<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>      return;<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>    }<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>  }<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span><a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>  private void updateStoreOnExec(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      if (LOG.isTraceEnabled()) {<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>      }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      store.insert(procedure, subprocs);<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>    } else {<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      LOG.trace("Store update {}", procedure);<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>        // remove child procedures<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>        if (childProcIds != null) {<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>          store.delete(procedure, childProcIds);<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>            procedures.remove(childProcIds[i]);<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>          }<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>        } else {<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>          store.update(procedure);<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>        }<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>      } else {<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>        store.update(procedure);<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      }<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>    }<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>  }<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span><a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>  private void handleInterruptedException(Procedure&lt;TEnvironment&gt; proc, InterruptedException e) {<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>    LOG.trace("Interrupt during {}. suspend and retry it later.", proc, e);<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>    // and the executor/store will be stopped.<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>  }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span><a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  private void execCompletionCleanup(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>    final TEnvironment env = getEnvironment();<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>    if (proc.hasLock()) {<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      LOG.warn("Usually this should not happen, we will release the lock before if the procedure" +<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>        " is finished, even if the holdLock is true, arrive here means we have some holes where" +<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        " we do not release the lock. And the releaseLock below may fail since the procedure may" +<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        " have already been deleted from the procedure store.");<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      releaseLock(proc, true);<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>    }<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>    try {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>      proc.completionCleanup(env);<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>    } catch (Throwable e) {<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>    }<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>  }<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span><a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>  private void procedureFinished(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    // call the procedure completion cleanup handler<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>    execCompletionCleanup(proc);<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span><a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>    CompletedProcedureRetainer&lt;TEnvironment&gt; retainer = new CompletedProcedureRetainer&lt;&gt;(proc);<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span><a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>    // update the executor internal state maps<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>      retainer.setClientAckTime(0);<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>    }<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span><a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>    completed.put(proc.getProcId(), retainer);<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>    rollbackStack.remove(proc.getProcId());<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>    procedures.remove(proc.getProcId());<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span><a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>    // call the runnableSet completion cleanup handler<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>    try {<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>      scheduler.completionCleanup(proc);<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>    } catch (Throwable e) {<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: {}", proc, e);<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
 <span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    // call the runnableSet completion cleanup handler<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    try {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      scheduler.completionCleanup(proc);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>    } catch (Throwable e) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: {}", proc, e);<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>    }<a name="line.1757"></a>
+<span class="sourceLineNo">1751</span>    // Notify the listeners<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>  }<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span><a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>  RootProcedureState&lt;TEnvironment&gt; getProcStack(long rootProcId) {<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    return rollbackStack.get(rootProcId);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>  }<a name="line.1757"></a>
 <span class="sourceLineNo">1758</span><a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>    // Notify the listeners<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span><a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>  RootProcedureState&lt;TEnvironment&gt; getProcStack(long rootProcId) {<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>    return rollbackStack.get(rootProcId);<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  }<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>  // ==========================================================================<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>  //  Worker Thread<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>  // ==========================================================================<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>  private class WorkerThread extends StoppableThread {<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    private volatile Procedure&lt;TEnvironment&gt; activeProcedure;<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    public WorkerThread(ThreadGroup group) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      this(group, "PEWorker-");<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    }<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span><a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    protected WorkerThread(ThreadGroup group, String prefix) {<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>      super(group, prefix + workerId.incrementAndGet());<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>      setDaemon(true);<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span><a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>    @Override<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    public void sendStopSignal() {<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      scheduler.signalAll();<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    }<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span><a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>    @Override<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>    public void run() {<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      try {<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>        while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>          Procedure&lt;TEnvironment&gt; proc = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>          if (proc == null) {<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>            continue;<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>          }<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>          this.activeProcedure = proc;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>          int activeCount = activeExecutorCount.incrementAndGet();<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>          int runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>          LOG.trace("Execute pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>            runningCount, activeCount);<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>          executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>          IdLock.Entry lockEntry = procExecutionLock.getLockEntry(proc.getProcId());<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>          try {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>            executeProcedure(proc);<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>          } catch (AssertionError e) {<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            LOG.info("ASSERT pid=" + proc.getProcId(), e);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            throw e;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          } finally {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>            procExecutionLock.releaseLockEntry(lockEntry);<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>            activeCount = activeExecutorCount.decrementAndGet();<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>            runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>            LOG.trace("Halt pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>              runningCount, activeCount);<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>            this.activeProcedure = null;<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>            lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>            executionStartTime.set(Long.MAX_VALUE);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>          }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>        }<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>      } catch (Throwable t) {<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        LOG.warn("Worker terminating UNNATURALLY {}", this.activeProcedure, t);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>      } finally {<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        LOG.trace("Worker terminated.");<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>      }<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>      workerThreads.remove(this);<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    }<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    @Override<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    public String toString() {<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      Procedure&lt;?&gt; p = this.activeProcedure;<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>      return getName() + "(pid=" + (p == null? Procedure.NO_PROC_ID: p.getProcId() + ")");<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>    }<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span><a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    /**<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>     * @return the time since the current procedure is running<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>     */<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    public long getCurrentRunTime() {<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>    }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span><a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    // core worker never timeout<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>      return true;<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    }<

<TRUNCATED>

[09/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html
index 9c54904..0a656db 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html
@@ -1371,589 +1371,581 @@
 <span class="sourceLineNo">1363</span>    assert subprocStack != null : "Called rollback with no steps executed rootProc=" + rootProc;<a name="line.1363"></a>
 <span class="sourceLineNo">1364</span><a name="line.1364"></a>
 <span class="sourceLineNo">1365</span>    int stackTail = subprocStack.size();<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>    boolean reuseLock = false;<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>    while (stackTail --&gt; 0) {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>      Procedure&lt;TEnvironment&gt; proc = subprocStack.get(stackTail);<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span><a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>      LockState lockState;<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>      if (!reuseLock &amp;&amp; (lockState = acquireLock(proc)) != LockState.LOCK_ACQUIRED) {<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>        // can't take a lock on the procedure, add the root-proc back on the<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>        // queue waiting for the lock availability<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>        return lockState;<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>      }<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span><a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      lockState = executeRollback(proc);<a name="line.1377"></a>
+<span class="sourceLineNo">1366</span>    while (stackTail-- &gt; 0) {<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>      Procedure&lt;TEnvironment&gt; proc = subprocStack.get(stackTail);<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span><a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>      LockState lockState = acquireLock(proc);<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>      if (lockState != LockState.LOCK_ACQUIRED) {<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>        // can't take a lock on the procedure, add the root-proc back on the<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>        // queue waiting for the lock availability<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>        return lockState;<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>      }<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span><a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>      lockState = executeRollback(proc);<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      releaseLock(proc, false);<a name="line.1377"></a>
 <span class="sourceLineNo">1378</span>      boolean abortRollback = lockState != LockState.LOCK_ACQUIRED;<a name="line.1378"></a>
 <span class="sourceLineNo">1379</span>      abortRollback |= !isRunning() || !store.isRunning();<a name="line.1379"></a>
 <span class="sourceLineNo">1380</span><a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      // If the next procedure is the same to this one<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      // (e.g. StateMachineProcedure reuse the same instance)<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      // we can avoid to lock/unlock each step<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>      reuseLock = stackTail &gt; 0 &amp;&amp; (subprocStack.get(stackTail - 1) == proc) &amp;&amp; !abortRollback;<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>      if (!reuseLock &amp;&amp; proc.hasLock()) {<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        releaseLock(proc, false);<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>      }<a name="line.1387"></a>
+<span class="sourceLineNo">1381</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      // useful to test the procedure recovery.<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>      if (abortRollback) {<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>        return lockState;<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>      }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span><a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>      subprocStack.remove(stackTail);<a name="line.1387"></a>
 <span class="sourceLineNo">1388</span><a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>      // useful to test the procedure recovery.<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      if (abortRollback) {<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>        return lockState;<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>      }<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span><a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>      subprocStack.remove(stackTail);<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span><a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>      if (proc.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>        return LockState.LOCK_YIELD_WAIT;<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>      }<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span><a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>      if (proc != rootProc) {<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>        execCompletionCleanup(proc);<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      }<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>    }<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span><a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    // Finalize the procedure state<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>    LOG.info("Rolled back " + rootProc +<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>             " exec-time=" + StringUtils.humanTimeDiff(rootProc.elapsedTime()));<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>    procedureFinished(rootProc);<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>    return LockState.LOCK_ACQUIRED;<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>  }<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span><a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>  /**<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>   * Execute the rollback of the procedure step.<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>   * It updates the store with the new state (stack index)<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>   * or will remove completly the procedure in case it is a child.<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>   */<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>  private LockState executeRollback(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>    try {<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>      proc.doRollback(getEnvironment());<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>    } catch (IOException e) {<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>      LOG.debug("Roll back attempt failed for {}", proc, e);<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>    } catch (InterruptedException e) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>      handleInterruptedException(proc, e);<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>    } catch (Throwable e) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>      LOG.error(HBaseMarkers.FATAL, "CODE-BUG: Uncaught runtime exception for " + proc, e);<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>    }<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span><a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>    // allows to kill the executor before something is stored to the wal.<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>    // useful to test the procedure recovery.<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>    if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate()) {<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>      String msg = "TESTING: Kill before store update";<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>      LOG.debug(msg);<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      stop();<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>      throw new RuntimeException(msg);<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    }<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span><a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>    if (proc.removeStackIndex()) {<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      proc.setState(ProcedureState.ROLLEDBACK);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span><a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      // update metrics on finishing the procedure (fail)<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>      proc.updateMetricsOnFinish(getEnvironment(), proc.elapsedTime(), false);<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span><a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>      if (proc.hasParent()) {<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>        store.delete(proc.getProcId());<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>        procedures.remove(proc.getProcId());<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      } else {<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>        final long[] childProcIds = rollbackStack.get(proc.getProcId()).getSubprocedureIds();<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>        if (childProcIds != null) {<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>          store.delete(proc, childProcIds);<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>        } else {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>          store.update(proc);<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>        }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      }<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>    } else {<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>      store.update(proc);<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    }<a name="line.1461"></a>
+<span class="sourceLineNo">1389</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>      if (proc.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        return LockState.LOCK_YIELD_WAIT;<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span><a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      if (proc != rootProc) {<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>        execCompletionCleanup(proc);<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>      }<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>    }<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span><a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>    // Finalize the procedure state<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>    LOG.info("Rolled back " + rootProc +<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>             " exec-time=" + StringUtils.humanTimeDiff(rootProc.elapsedTime()));<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>    procedureFinished(rootProc);<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>    return LockState.LOCK_ACQUIRED;<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>  }<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span><a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>  /**<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>   * Execute the rollback of the procedure step.<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>   * It updates the store with the new state (stack index)<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>   * or will remove completly the procedure in case it is a child.<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>   */<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>  private LockState executeRollback(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>    try {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>      proc.doRollback(getEnvironment());<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>    } catch (IOException e) {<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      LOG.debug("Roll back attempt failed for {}", proc, e);<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>    } catch (InterruptedException e) {<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>      handleInterruptedException(proc, e);<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>    } catch (Throwable e) {<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>      LOG.error(HBaseMarkers.FATAL, "CODE-BUG: Uncaught runtime exception for " + proc, e);<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>    }<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span><a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>    // allows to kill the executor before something is stored to the wal.<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    // useful to test the procedure recovery.<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>    if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate()) {<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>      String msg = "TESTING: Kill before store update";<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      LOG.debug(msg);<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      stop();<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>      throw new RuntimeException(msg);<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>    }<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span><a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>    if (proc.removeStackIndex()) {<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>      proc.setState(ProcedureState.ROLLEDBACK);<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span><a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>      // update metrics on finishing the procedure (fail)<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>      proc.updateMetricsOnFinish(getEnvironment(), proc.elapsedTime(), false);<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span><a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>      if (proc.hasParent()) {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>        store.delete(proc.getProcId());<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>        procedures.remove(proc.getProcId());<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      } else {<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>        final long[] childProcIds = rollbackStack.get(proc.getProcId()).getSubprocedureIds();<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>        if (childProcIds != null) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>          store.delete(proc, childProcIds);<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>        } else {<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>          store.update(proc);<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>        }<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>      }<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>    } else {<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>      store.update(proc);<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>    }<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span><a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>    return LockState.LOCK_ACQUIRED;<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>  }<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span><a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>  private void yieldProcedure(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>    releaseLock(proc, false);<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    scheduler.yield(proc);<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>  }<a name="line.1461"></a>
 <span class="sourceLineNo">1462</span><a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>    return LockState.LOCK_ACQUIRED;<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>  }<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span><a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>  private void yieldProcedure(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>    releaseLock(proc, false);<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>    scheduler.yield(proc);<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>  }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span><a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>  /**<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>   * Executes &lt;code&gt;procedure&lt;/code&gt;<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>   * &lt;ul&gt;<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>   *  &lt;li&gt;Calls the doExecute() of the procedure<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>   *  &lt;li&gt;If the procedure execution didn't fail (i.e. valid user input)<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>   *  &lt;ul&gt;<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>   *    &lt;li&gt;...and returned subprocedures<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>   *    &lt;ul&gt;&lt;li&gt;The subprocedures are initialized.<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>   *      &lt;li&gt;The subprocedures are added to the store<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>   *      &lt;li&gt;The subprocedures are added to the runnable queue<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>   *      &lt;li&gt;The procedure is now in a WAITING state, waiting for the subprocedures to complete<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>   *    &lt;/ul&gt;<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>   *    &lt;/li&gt;<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>   *   &lt;li&gt;...if there are no subprocedure<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>   *    &lt;ul&gt;&lt;li&gt;the procedure completed successfully<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>   *      &lt;li&gt;if there is a parent (WAITING)<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>   *      &lt;li&gt;the parent state will be set to RUNNABLE<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>   *    &lt;/ul&gt;<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>   *   &lt;/li&gt;<a name="line.1489"></a>
+<span class="sourceLineNo">1463</span>  /**<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>   * Executes &lt;code&gt;procedure&lt;/code&gt;<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>   * &lt;ul&gt;<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>   *  &lt;li&gt;Calls the doExecute() of the procedure<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>   *  &lt;li&gt;If the procedure execution didn't fail (i.e. valid user input)<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>   *  &lt;ul&gt;<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>   *    &lt;li&gt;...and returned subprocedures<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>   *    &lt;ul&gt;&lt;li&gt;The subprocedures are initialized.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>   *      &lt;li&gt;The subprocedures are added to the store<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>   *      &lt;li&gt;The subprocedures are added to the runnable queue<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>   *      &lt;li&gt;The procedure is now in a WAITING state, waiting for the subprocedures to complete<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>   *    &lt;/ul&gt;<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>   *    &lt;/li&gt;<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>   *   &lt;li&gt;...if there are no subprocedure<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>   *    &lt;ul&gt;&lt;li&gt;the procedure completed successfully<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>   *      &lt;li&gt;if there is a parent (WAITING)<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>   *      &lt;li&gt;the parent state will be set to RUNNABLE<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>   *    &lt;/ul&gt;<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>   *   &lt;/li&gt;<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>   *  &lt;/ul&gt;<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>   *  &lt;/li&gt;<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>   *  &lt;li&gt;In case of failure<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>   *  &lt;ul&gt;<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>   *    &lt;li&gt;The store is updated with the new state&lt;/li&gt;<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>   *    &lt;li&gt;The executor (caller of this method) will start the rollback of the procedure&lt;/li&gt;<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>   *  &lt;/ul&gt;<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>   *  &lt;/li&gt;<a name="line.1489"></a>
 <span class="sourceLineNo">1490</span>   *  &lt;/ul&gt;<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>   *  &lt;/li&gt;<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>   *  &lt;li&gt;In case of failure<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>   *  &lt;ul&gt;<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>   *    &lt;li&gt;The store is updated with the new state&lt;/li&gt;<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>   *    &lt;li&gt;The executor (caller of this method) will start the rollback of the procedure&lt;/li&gt;<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>   *  &lt;/ul&gt;<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>   *  &lt;/li&gt;<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>   *  &lt;/ul&gt;<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>   */<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  private void execProcedure(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>    Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>        "NOT RUNNABLE! " + procedure.toString());<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span><a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    // Procedures can suspend themselves. They skip out by throwing a ProcedureSuspendedException.<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    // The exception is caught below and then we hurry to the exit without disturbing state. The<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>    // idea is that the processing of this procedure will be unsuspended later by an external event<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>    // such the report of a region open.<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    boolean suspended = false;<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span><a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    // Whether to 're-' -execute; run through the loop again.<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>    boolean reExecute = false;<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span><a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    Procedure&lt;TEnvironment&gt;[] subprocs = null;<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>    do {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>      reExecute = false;<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>      try {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>        subprocs = procedure.doExecute(getEnvironment());<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>        if (subprocs != null &amp;&amp; subprocs.length == 0) {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>          subprocs = null;<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        }<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      } catch (ProcedureSuspendedException e) {<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        LOG.trace("Suspend {}", procedure);<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>        suspended = true;<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>      } catch (ProcedureYieldException e) {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>        LOG.trace("Yield {}", procedure, e);<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>        yieldProcedure(procedure);<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>        return;<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      } catch (InterruptedException e) {<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        LOG.trace("Yield interrupt {}", procedure, e);<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>        handleInterruptedException(procedure, e);<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>        yieldProcedure(procedure);<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>        return;<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>      } catch (Throwable e) {<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>        // Catch NullPointerExceptions or similar errors...<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>        String msg = "CODE-BUG: Uncaught runtime exception: " + procedure;<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>        LOG.error(msg, e);<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>        procedure.setFailure(new RemoteProcedureException(msg, e));<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>      }<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span><a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      if (!procedure.isFailed()) {<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>        if (subprocs != null) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>          if (subprocs.length == 1 &amp;&amp; subprocs[0] == procedure) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>            // Procedure returned itself. Quick-shortcut for a state machine-like procedure;<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>            // i.e. we go around this loop again rather than go back out on the scheduler queue.<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>            subprocs = null;<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>            reExecute = true;<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>            LOG.trace("Short-circuit to next step on pid={}", procedure.getProcId());<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          } else {<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>            // Yield the current procedure, and make the subprocedure runnable<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>            // subprocs may come back 'null'.<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            subprocs = initializeChildren(procStack, procedure, subprocs);<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            LOG.info("Initialized subprocedures=" +<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>              (subprocs == null? null:<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>                Stream.of(subprocs).map(e -&gt; "{" + e.toString() + "}").<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>                collect(Collectors.toList()).toString()));<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>          }<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>        } else if (procedure.getState() == ProcedureState.WAITING_TIMEOUT) {<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>          LOG.trace("Added to timeoutExecutor {}", procedure);<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>          timeoutExecutor.add(procedure);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>        } else if (!suspended) {<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>          // No subtask, so we are done<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>          procedure.setState(ProcedureState.SUCCESS);<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        }<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      }<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span><a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>      // Add the procedure to the stack<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      procStack.addRollbackStep(procedure);<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span><a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      // useful to test the procedure recovery.<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>      if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate(suspended)) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>        String msg = "TESTING: Kill before store update: " + procedure;<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>        LOG.debug(msg);<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>        stop();<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        throw new RuntimeException(msg);<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>      }<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span><a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>      //<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      // Commit the transaction even if a suspend (state may have changed). Note this append<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      // can take a bunch of time to complete.<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span><a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      // if the store is not running we are aborting<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      if (!store.isRunning()) {<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>        return;<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>      }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>        yieldProcedure(procedure);<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>        return;<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>      }<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>    } while (reExecute);<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    // Submit the new subprocedures<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>      submitChildrenProcedures(subprocs);<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>    }<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span><a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>    // we need to log the release lock operation before waking up the parent procedure, as there<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    // could be race that the parent procedure may call updateStoreOnExec ahead of us and remove all<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>    // the sub procedures from store and cause problems...<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    releaseLock(procedure, false);<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span><a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>    // if the procedure is complete and has a parent, count down the children latch.<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>    // If 'suspended', do nothing to change state -- let other threads handle unsuspend event.<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    if (!suspended &amp;&amp; procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      countDownChildren(procStack, procedure);<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span><a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>  private Procedure&lt;TEnvironment&gt;[] initializeChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    assert subprocs != null : "expected subprocedures";<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      if (subproc == null) {<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>          new IllegalArgumentIOException(msg)));<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>        return null;<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>      }<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span><a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>      subproc.setRootProcId(rootProcId);<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>      subproc.setProcId(nextProcId());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>      procStack.addSubProcedure(subproc);<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>    }<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span><a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    if (!procedure.isFailed()) {<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>      switch (procedure.getState()) {<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>        case RUNNABLE:<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>          break;<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>        case WAITING_TIMEOUT:<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>          timeoutExecutor.add(procedure);<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>          break;<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>        default:<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>          break;<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>      }<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>    }<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    return subprocs;<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>  }<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span><a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>  private void submitChildrenProcedures(Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>      subproc.updateMetricsOnSubmit(getEnvironment());<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      scheduler.addFront(subproc);<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>  }<a name="line.1663"></a>
+<span class="sourceLineNo">1491</span>   */<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>  private void execProcedure(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>    Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>        "NOT RUNNABLE! " + procedure.toString());<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span><a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>    // Procedures can suspend themselves. They skip out by throwing a ProcedureSuspendedException.<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>    // The exception is caught below and then we hurry to the exit without disturbing state. The<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>    // idea is that the processing of this procedure will be unsuspended later by an external event<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>    // such the report of a region open.<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>    boolean suspended = false;<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span><a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    // Whether to 're-' -execute; run through the loop again.<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>    boolean reExecute = false;<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span><a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>    Procedure&lt;TEnvironment&gt;[] subprocs = null;<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>    do {<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>      reExecute = false;<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      try {<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>        subprocs = procedure.doExecute(getEnvironment());<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>        if (subprocs != null &amp;&amp; subprocs.length == 0) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>          subprocs = null;<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        }<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>      } catch (ProcedureSuspendedException e) {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>        LOG.trace("Suspend {}", procedure);<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>        suspended = true;<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>      } catch (ProcedureYieldException e) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>        LOG.trace("Yield {}", procedure, e);<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>        yieldProcedure(procedure);<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>        return;<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>      } catch (InterruptedException e) {<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        LOG.trace("Yield interrupt {}", procedure, e);<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>        handleInterruptedException(procedure, e);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>        yieldProcedure(procedure);<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>        return;<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      } catch (Throwable e) {<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>        // Catch NullPointerExceptions or similar errors...<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>        String msg = "CODE-BUG: Uncaught runtime exception: " + procedure;<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>        LOG.error(msg, e);<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>        procedure.setFailure(new RemoteProcedureException(msg, e));<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>      }<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span><a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      if (!procedure.isFailed()) {<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>        if (subprocs != null) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>          if (subprocs.length == 1 &amp;&amp; subprocs[0] == procedure) {<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>            // Procedure returned itself. Quick-shortcut for a state machine-like procedure;<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>            // i.e. we go around this loop again rather than go back out on the scheduler queue.<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>            subprocs = null;<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>            reExecute = true;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>            LOG.trace("Short-circuit to next step on pid={}", procedure.getProcId());<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>          } else {<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>            // Yield the current procedure, and make the subprocedure runnable<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>            // subprocs may come back 'null'.<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>            subprocs = initializeChildren(procStack, procedure, subprocs);<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>            LOG.info("Initialized subprocedures=" +<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>              (subprocs == null? null:<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>                Stream.of(subprocs).map(e -&gt; "{" + e.toString() + "}").<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>                collect(Collectors.toList()).toString()));<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>          }<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>        } else if (procedure.getState() == ProcedureState.WAITING_TIMEOUT) {<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>          LOG.trace("Added to timeoutExecutor {}", procedure);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>          timeoutExecutor.add(procedure);<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>        } else if (!suspended) {<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          // No subtask, so we are done<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          procedure.setState(ProcedureState.SUCCESS);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>        }<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>      }<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span><a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>      // Add the procedure to the stack<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>      procStack.addRollbackStep(procedure);<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span><a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>      // useful to test the procedure recovery.<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>      if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate(suspended)) {<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>        String msg = "TESTING: Kill before store update: " + procedure;<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        LOG.debug(msg);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>        stop();<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>        throw new RuntimeException(msg);<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>      }<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span><a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      //<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>      // Commit the transaction even if a suspend (state may have changed). Note this append<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>      // can take a bunch of time to complete.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span><a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      // if the store is not running we are aborting<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>      if (!store.isRunning()) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>        return;<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>      }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>        yieldProcedure(procedure);<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>        return;<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>      }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>    } while (reExecute);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>    // Submit the new subprocedures<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      submitChildrenProcedures(subprocs);<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>    }<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span><a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    // we need to log the release lock operation before waking up the parent procedure, as there<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    // could be race that the parent procedure may call updateStoreOnExec ahead of us and remove all<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    // the sub procedures from store and cause problems...<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    releaseLock(procedure, false);<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span><a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    // if the procedure is complete and has a parent, count down the children latch.<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>    // If 'suspended', do nothing to change state -- let other threads handle unsuspend event.<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    if (!suspended &amp;&amp; procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      countDownChildren(procStack, procedure);<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>    }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>  }<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span><a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>  private Procedure&lt;TEnvironment&gt;[] initializeChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    assert subprocs != null : "expected subprocedures";<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>      if (subproc == null) {<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>          new IllegalArgumentIOException(msg)));<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>        return null;<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>      }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span><a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      subproc.setRootProcId(rootProcId);<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      subproc.setProcId(nextProcId());<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      procStack.addSubProcedure(subproc);<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>    }<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span><a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>    if (!procedure.isFailed()) {<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>      switch (procedure.getState()) {<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>        case RUNNABLE:<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>          break;<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        case WAITING_TIMEOUT:<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>          timeoutExecutor.add(procedure);<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>          break;<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>        default:<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          break;<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>      }<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>    }<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    return subprocs;<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>  }<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span><a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>  private void submitChildrenProcedures(Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>      subproc.updateMetricsOnSubmit(getEnvironment());<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>      scheduler.addFront(subproc);<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    }<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>  }<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span><a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>  private void countDownChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    Procedure&lt;TEnvironment&gt; parent = procedures.get(procedure.getParentProcId());<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    if (parent == null) {<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>      assert procStack.isRollingback();<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>      return;<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    }<a name="line.1663"></a>
 <span class="sourceLineNo">1664</span><a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>  private void countDownChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>    Procedure&lt;TEnvironment&gt; parent = procedures.get(procedure.getParentProcId());<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    if (parent == null) {<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      assert procStack.isRollingback();<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>      return;<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>    }<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span><a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>    // If this procedure is the last child awake the parent procedure<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>    if (parent.tryRunnable()) {<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>      // If we succeeded in making the parent runnable -- i.e. all of its<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      // children have completed, move parent to front of the queue.<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      store.update(parent);<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      scheduler.addFront(parent);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      LOG.info("Finished subprocedure(s) of " + parent + "; resume parent processing.");<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>      return;<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>    }<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>  }<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span><a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>  private void updateStoreOnExec(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>      if (LOG.isTraceEnabled()) {<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>      }<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      store.insert(procedure, subprocs);<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>    } else {<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      LOG.trace("Store update {}", procedure);<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>        // remove child procedures<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        if (childProcIds != null) {<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>          store.delete(procedure, childProcIds);<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>            procedures.remove(childProcIds[i]);<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>          }<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>        } else {<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>          store.update(procedure);<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      } else {<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        store.update(procedure);<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>      }<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>    }<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>  }<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span><a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>  private void handleInterruptedException(Procedure&lt;TEnvironment&gt; proc, InterruptedException e) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>    LOG.trace("Interrupt during {}. suspend and retry it later.", proc, e);<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>    // and the executor/store will be stopped.<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>  }<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span><a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>  private void execCompletionCleanup(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    final TEnvironment env = getEnvironment();<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>    if (proc.hasLock()) {<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>      LOG.warn("Usually this should not happen, we will release the lock before if the procedure" +<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>        " is finished, even if the holdLock is true, arrive here means we have some holes where" +<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        " we do not release the lock. And the releaseLock below may fail since the procedure may" +<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>        " have already been deleted from the procedure store.");<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>      releaseLock(proc, true);<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>    }<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>    try {<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>      proc.completionCleanup(env);<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>    } catch (Throwable e) {<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>    }<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>  }<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span><a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>  private void procedureFinished(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>    // call the procedure completion cleanup handler<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>    execCompletionCleanup(proc);<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span><a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>    CompletedProcedureRetainer&lt;TEnvironment&gt; retainer = new CompletedProcedureRetainer&lt;&gt;(proc);<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span><a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>    // update the executor internal state maps<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>      retainer.setClientAckTime(0);<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>    }<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span><a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>    completed.put(proc.getProcId(), retainer);<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>    rollbackStack.remove(proc.getProcId());<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    procedures.remove(proc.getProcId());<a name="line.1749"></a>
+<span class="sourceLineNo">1665</span>    // If this procedure is the last child awake the parent procedure<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>    if (parent.tryRunnable()) {<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>      // If we succeeded in making the parent runnable -- i.e. all of its<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      // children have completed, move parent to front of the queue.<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>      store.update(parent);<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>      scheduler.addFront(parent);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      LOG.info("Finished subprocedure(s) of " + parent + "; resume parent processing.");<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>      return;<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>    }<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>  }<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span><a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>  private void updateStoreOnExec(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      if (LOG.isTraceEnabled()) {<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>      }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      store.insert(procedure, subprocs);<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>    } else {<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      LOG.trace("Store update {}", procedure);<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>        // remove child procedures<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>        if (childProcIds != null) {<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>          store.delete(procedure, childProcIds);<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>            procedures.remove(childProcIds[i]);<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>          }<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>        } else {<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>          store.update(procedure);<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>        }<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>      } else {<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>        store.update(procedure);<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      }<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>    }<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>  }<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span><a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>  private void handleInterruptedException(Procedure&lt;TEnvironment&gt; proc, InterruptedException e) {<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>    LOG.trace("Interrupt during {}. suspend and retry it later.", proc, e);<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>    // and the executor/store will be stopped.<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>  }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span><a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  private void execCompletionCleanup(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>    final TEnvironment env = getEnvironment();<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>    if (proc.hasLock()) {<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      LOG.warn("Usually this should not happen, we will release the lock before if the procedure" +<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>        " is finished, even if the holdLock is true, arrive here means we have some holes where" +<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        " we do not release the lock. And the releaseLock below may fail since the procedure may" +<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        " have already been deleted from the procedure store.");<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      releaseLock(proc, true);<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>    }<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>    try {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>      proc.completionCleanup(env);<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>    } catch (Throwable e) {<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>    }<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>  }<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span><a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>  private void procedureFinished(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    // call the procedure completion cleanup handler<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>    execCompletionCleanup(proc);<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span><a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>    CompletedProcedureRetainer&lt;TEnvironment&gt; retainer = new CompletedProcedureRetainer&lt;&gt;(proc);<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span><a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>    // update the executor internal state maps<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>      retainer.setClientAckTime(0);<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>    }<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span><a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>    completed.put(proc.getProcId(), retainer);<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>    rollbackStack.remove(proc.getProcId());<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>    procedures.remove(proc.getProcId());<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span><a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>    // call the runnableSet completion cleanup handler<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>    try {<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>      scheduler.completionCleanup(proc);<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>    } catch (Throwable e) {<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: {}", proc, e);<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
 <span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    // call the runnableSet completion cleanup handler<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    try {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      scheduler.completionCleanup(proc);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>    } catch (Throwable e) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: {}", proc, e);<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>    }<a name="line.1757"></a>
+<span class="sourceLineNo">1751</span>    // Notify the listeners<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>  }<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span><a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>  RootProcedureState&lt;TEnvironment&gt; getProcStack(long rootProcId) {<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    return rollbackStack.get(rootProcId);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>  }<a name="line.1757"></a>
 <span class="sourceLineNo">1758</span><a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>    // Notify the listeners<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span><a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>  RootProcedureState&lt;TEnvironment&gt; getProcStack(long rootProcId) {<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>    return rollbackStack.get(rootProcId);<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  }<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>  // ==========================================================================<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>  //  Worker Thread<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>  // ==========================================================================<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>  private class WorkerThread extends StoppableThread {<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    private volatile Procedure&lt;TEnvironment&gt; activeProcedure;<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    public WorkerThread(ThreadGroup group) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      this(group, "PEWorker-");<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    }<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span><a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    protected WorkerThread(ThreadGroup group, String prefix) {<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>      super(group, prefix + workerId.incrementAndGet());<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>      setDaemon(true);<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span><a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>    @Override<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    public void sendStopSignal() {<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      scheduler.signalAll();<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    }<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span><a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>    @Override<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>    public void run() {<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      try {<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>        while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>          Procedure&lt;TEnvironment&gt; proc = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>          if (proc == null) {<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>            continue;<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>          }<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>          this.activeProcedure = proc;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>          int activeCount = activeExecutorCount.incrementAndGet();<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>          int runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>          LOG.trace("Execute pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>            runningCount, activeCount);<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>          executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>          IdLock.Entry lockEntry = procExecutionLock.getLockEntry(proc.getProcId());<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>          try {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>            executeProcedure(proc);<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>          } catch (AssertionError e) {<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            LOG.info("ASSERT pid=" + proc.getProcId(), e);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            throw e;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          } finally {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>            procExecutionLock.releaseLockEntry(lockEntry);<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>            activeCount = activeExecutorCount.decrementAndGet();<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>            runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>            LOG.trace("Halt pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>              runningCount, activeCount);<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>            this.activeProcedure = null;<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>            lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>            executionStartTime.set(Long.MAX_VALUE);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>          }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>        }<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>      } catch (Throwable t) {<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        LOG.warn("Worker terminating UNNATURALLY {}", this.activeProcedure, t);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>      } finally {<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        LOG.trace("Worker terminated.");<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>      }<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>      workerThreads.remove(this);<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    }<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    @Override<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    public String toString() {<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      Procedure&lt;?&gt; p = this.activeProcedure;<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>      return getName() + "(pid=" + (p == null? Procedure.NO_PROC_ID: p.getProcId() + ")");<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>    }<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span><a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    /**<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>     * @return the time since the current procedure is running<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>     */<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    public long getCurrentRunTime() {<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>    }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span><a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    // core worker never timeout<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>      return true;<a name="line.1843"></a>
-<spa

<TRUNCATED>

[17/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/src-html/org/apache/hadoop/hbase/HTableDescriptor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/HTableDescriptor.html b/devapidocs/src-html/org/apache/hadoop/hbase/HTableDescriptor.html
index 19efd1a..dc5095c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/HTableDescriptor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/HTableDescriptor.html
@@ -73,841 +73,865 @@
 <span class="sourceLineNo">065</span>  public static final String REGION_REPLICATION = TableDescriptorBuilder.REGION_REPLICATION;<a name="line.65"></a>
 <span class="sourceLineNo">066</span>  public static final String REGION_MEMSTORE_REPLICATION = TableDescriptorBuilder.REGION_MEMSTORE_REPLICATION;<a name="line.66"></a>
 <span class="sourceLineNo">067</span>  public static final String NORMALIZATION_ENABLED = TableDescriptorBuilder.NORMALIZATION_ENABLED;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  public static final String PRIORITY = TableDescriptorBuilder.PRIORITY;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  public static final boolean DEFAULT_READONLY = TableDescriptorBuilder.DEFAULT_READONLY;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  public static final boolean DEFAULT_COMPACTION_ENABLED = TableDescriptorBuilder.DEFAULT_COMPACTION_ENABLED;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  public static final boolean DEFAULT_NORMALIZATION_ENABLED = TableDescriptorBuilder.DEFAULT_NORMALIZATION_ENABLED;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  public static final long DEFAULT_MEMSTORE_FLUSH_SIZE = TableDescriptorBuilder.DEFAULT_MEMSTORE_FLUSH_SIZE;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  public static final int DEFAULT_REGION_REPLICATION = TableDescriptorBuilder.DEFAULT_REGION_REPLICATION;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  public static final boolean DEFAULT_REGION_MEMSTORE_REPLICATION = TableDescriptorBuilder.DEFAULT_REGION_MEMSTORE_REPLICATION;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  protected final ModifyableTableDescriptor delegatee;<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  /**<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * Construct a table descriptor specifying a TableName object<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   * @param name Table name.<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-174"&gt;HADOOP-1581 HBASE: (HBASE-174) Un-openable tablename bug&lt;/a&gt;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   */<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  public HTableDescriptor(final TableName name) {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    this(new ModifyableTableDescriptor(name));<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  }<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>  /**<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * Construct a table descriptor by cloning the descriptor passed as a parameter.<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * &lt;p&gt;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   * Makes a deep copy of the supplied descriptor.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   * Can make a modifiable descriptor from an ImmutableHTableDescriptor.<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * @param desc The descriptor.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   */<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  public HTableDescriptor(final HTableDescriptor desc) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    this(desc, true);<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>  protected HTableDescriptor(final HTableDescriptor desc, boolean deepClone) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    this(deepClone ? new ModifyableTableDescriptor(desc.getTableName(), desc)<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      : desc.delegatee);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>  public HTableDescriptor(final TableDescriptor desc) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    this(new ModifyableTableDescriptor(desc.getTableName(), desc));<a name="line.103"></a>
+<span class="sourceLineNo">068</span>  public static final String NORMALIZER_TARGET_REGION_COUNT =<a name="line.68"></a>
+<span class="sourceLineNo">069</span>      TableDescriptorBuilder.NORMALIZER_TARGET_REGION_COUNT;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  public static final String NORMALIZER_TARGET_REGION_SIZE =<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      TableDescriptorBuilder.NORMALIZER_TARGET_REGION_SIZE;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  public static final String PRIORITY = TableDescriptorBuilder.PRIORITY;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  public static final boolean DEFAULT_READONLY = TableDescriptorBuilder.DEFAULT_READONLY;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  public static final boolean DEFAULT_COMPACTION_ENABLED = TableDescriptorBuilder.DEFAULT_COMPACTION_ENABLED;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  public static final boolean DEFAULT_NORMALIZATION_ENABLED = TableDescriptorBuilder.DEFAULT_NORMALIZATION_ENABLED;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  public static final long DEFAULT_MEMSTORE_FLUSH_SIZE = TableDescriptorBuilder.DEFAULT_MEMSTORE_FLUSH_SIZE;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  public static final int DEFAULT_REGION_REPLICATION = TableDescriptorBuilder.DEFAULT_REGION_REPLICATION;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  public static final boolean DEFAULT_REGION_MEMSTORE_REPLICATION = TableDescriptorBuilder.DEFAULT_REGION_MEMSTORE_REPLICATION;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  protected final ModifyableTableDescriptor delegatee;<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>  /**<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * Construct a table descriptor specifying a TableName object<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   * @param name Table name.<a name="line.83"></a>
+<span class="sourceLineNo">084</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-174"&gt;HADOOP-1581 HBASE: (HBASE-174) Un-openable tablename bug&lt;/a&gt;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   */<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  public HTableDescriptor(final TableName name) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    this(new ModifyableTableDescriptor(name));<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  }<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  /**<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * Construct a table descriptor by cloning the descriptor passed as a parameter.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * &lt;p&gt;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * Makes a deep copy of the supplied descriptor.<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   * Can make a modifiable descriptor from an ImmutableHTableDescriptor.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * @param desc The descriptor.<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public HTableDescriptor(final HTableDescriptor desc) {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    this(desc, true);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  protected HTableDescriptor(final HTableDescriptor desc, boolean deepClone) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    this(deepClone ? new ModifyableTableDescriptor(desc.getTableName(), desc)<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      : desc.delegatee);<a name="line.103"></a>
 <span class="sourceLineNo">104</span>  }<a name="line.104"></a>
 <span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>  /**<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   * Construct a table descriptor by cloning the descriptor passed as a parameter<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   * but using a different table name.<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * &lt;p&gt;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * Makes a deep copy of the supplied descriptor.<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * Can make a modifiable descriptor from an ImmutableHTableDescriptor.<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * @param name Table name.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * @param desc The descriptor.<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   */<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  public HTableDescriptor(final TableName name, final HTableDescriptor desc) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    this(new ModifyableTableDescriptor(name, desc));<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  protected HTableDescriptor(ModifyableTableDescriptor delegatee) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    this.delegatee = delegatee;<a name="line.120"></a>
+<span class="sourceLineNo">106</span>  public HTableDescriptor(final TableDescriptor desc) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    this(new ModifyableTableDescriptor(desc.getTableName(), desc));<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  /**<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * Construct a table descriptor by cloning the descriptor passed as a parameter<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * but using a different table name.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * &lt;p&gt;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * Makes a deep copy of the supplied descriptor.<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * Can make a modifiable descriptor from an ImmutableHTableDescriptor.<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   * @param name Table name.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * @param desc The descriptor.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   */<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  public HTableDescriptor(final TableName name, final HTableDescriptor desc) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    this(new ModifyableTableDescriptor(name, desc));<a name="line.120"></a>
 <span class="sourceLineNo">121</span>  }<a name="line.121"></a>
 <span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>  /**<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * This is vestigial API. It will be removed in 3.0.<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   *<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * @return always return the false<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   */<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  public boolean isRootRegion() {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    return false;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>  /**<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   * Checks if this table is &lt;code&gt; hbase:meta &lt;/code&gt;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   * region.<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   *<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   * @return true if this table is &lt;code&gt; hbase:meta &lt;/code&gt;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   * region<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  @Override<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  public boolean isMetaRegion() {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    return delegatee.isMetaRegion();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>  /**<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * Checks if the table is a &lt;code&gt;hbase:meta&lt;/code&gt; table<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   *<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * @return true if table is &lt;code&gt; hbase:meta &lt;/code&gt; region.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   */<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  @Override<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  public boolean isMetaTable() {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    return delegatee.isMetaTable();<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  }<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>   * @return Getter for fetching an unmodifiable map.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  @Override<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  public Map&lt;Bytes, Bytes&gt; getValues() {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    return delegatee.getValues();<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  }<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>  /**<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   * Setter for storing metadata as a (key, value) pair in map<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   *<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * @param key The key.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * @param value The value. If null, removes the setting.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  public HTableDescriptor setValue(byte[] key, byte[] value) {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    getDelegateeForModification().setValue(key, value);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    return this;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>  /*<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * Setter for storing metadata as a (key, value) pair in map<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   *<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * @param key The key.<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   * @param value The value. If null, removes the setting.<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   */<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  public HTableDescriptor setValue(final Bytes key, final Bytes value) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    getDelegateeForModification().setValue(key, value);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    return this;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  /**<a name="line.184"></a>
-<span class="sourceLineNo">185</span>   * Setter for storing metadata as a (key, value) pair in map<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   *<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   * @param key The key.<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   * @param value The value. If null, removes the setting.<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   */<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  public HTableDescriptor setValue(String key, String value) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    getDelegateeForModification().setValue(Bytes.toBytes(key), Bytes.toBytes(value));<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    return this;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  }<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>  /**<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   * Remove metadata represented by the key from the map<a name="line.196"></a>
-<span class="sourceLineNo">197</span>   *<a name="line.197"></a>
-<span class="sourceLineNo">198</span>   * @param key Key whose key and value we're to remove from HTableDescriptor<a name="line.198"></a>
-<span class="sourceLineNo">199</span>   * parameters.<a name="line.199"></a>
-<span class="sourceLineNo">200</span>   */<a name="line.200"></a>
-<span class="sourceLineNo">201</span>  public void remove(final String key) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    getDelegateeForModification().removeValue(Bytes.toBytes(key));<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  }<a name="line.203"></a>
-<span class="sourceLineNo">204</span><a name="line.204"></a>
-<span class="sourceLineNo">205</span>  /**<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * Remove metadata represented by the key from the map<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   *<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   * @param key Key whose key and value we're to remove from HTableDescriptor<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   * parameters.<a name="line.209"></a>
-<span class="sourceLineNo">210</span>   */<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  public void remove(Bytes key) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    getDelegateeForModification().removeValue(key);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Remove metadata represented by the key from the map<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   *<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * @param key Key whose key and value we're to remove from HTableDescriptor<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * parameters.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   */<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  public void remove(final byte [] key) {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    getDelegateeForModification().removeValue(key);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  }<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>  /**<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * Check if the readOnly flag of the table is set. If the readOnly flag is<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * set then the contents of the table can only be read from but not modified.<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   *<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * @return true if all columns in the table should be read only<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  @Override<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  public boolean isReadOnly() {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    return delegatee.isReadOnly();<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  }<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>  /**<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   * Setting the table as read only sets all the columns in the table as read<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * only. By default all tables are modifiable, but if the readOnly flag is<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * set to true then the contents of the table can only be read but not modified.<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   *<a name="line.240"></a>
-<span class="sourceLineNo">241</span>   * @param readOnly True if all of the columns in the table should be read<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   * only.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
-<span class="sourceLineNo">244</span>  public HTableDescriptor setReadOnly(final boolean readOnly) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    getDelegateeForModification().setReadOnly(readOnly);<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    return this;<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>   * Check if the compaction enable flag of the table is true. If flag is<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * false then no minor/major compactions will be done in real.<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   *<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   * @return true if table compaction enabled<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  @Override<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  public boolean isCompactionEnabled() {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    return delegatee.isCompactionEnabled();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  }<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>  /**<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   * Setting the table compaction enable flag.<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   *<a name="line.262"></a>
-<span class="sourceLineNo">263</span>   * @param isEnable True if enable compaction.<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   */<a name="line.264"></a>
-<span class="sourceLineNo">265</span>  public HTableDescriptor setCompactionEnabled(final boolean isEnable) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    getDelegateeForModification().setCompactionEnabled(isEnable);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    return this;<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>  /**<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   * Check if normalization enable flag of the table is true. If flag is<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   * false then no region normalizer won't attempt to normalize this table.<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   *<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * @return true if region normalization is enabled for this table<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  @Override<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  public boolean isNormalizationEnabled() {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    return delegatee.isNormalizationEnabled();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>  /**<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * Setting the table normalization enable flag.<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   *<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   * @param isEnable True if enable normalization.<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   */<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  public HTableDescriptor setNormalizationEnabled(final boolean isEnable) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    getDelegateeForModification().setNormalizationEnabled(isEnable);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    return this;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  /**<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   * Sets the {@link Durability} setting for the table. This defaults to Durability.USE_DEFAULT.<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * @param durability enum value<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   */<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  public HTableDescriptor setDurability(Durability durability) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    getDelegateeForModification().setDurability(durability);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    return this;<a name="line.297"></a>
+<span class="sourceLineNo">123</span>  protected HTableDescriptor(ModifyableTableDescriptor delegatee) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    this.delegatee = delegatee;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
+<span class="sourceLineNo">126</span><a name="line.126"></a>
+<span class="sourceLineNo">127</span>  /**<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * This is vestigial API. It will be removed in 3.0.<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   *<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   * @return always return the false<a name="line.130"></a>
+<span class="sourceLineNo">131</span>   */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  public boolean isRootRegion() {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    return false;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  }<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>  /**<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   * Checks if this table is &lt;code&gt; hbase:meta &lt;/code&gt;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   * region.<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   *<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   * @return true if this table is &lt;code&gt; hbase:meta &lt;/code&gt;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>   * region<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   */<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  public boolean isMetaRegion() {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    return delegatee.isMetaRegion();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  }<a name="line.146"></a>
+<span class="sourceLineNo">147</span><a name="line.147"></a>
+<span class="sourceLineNo">148</span>  /**<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * Checks if the table is a &lt;code&gt;hbase:meta&lt;/code&gt; table<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   *<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * @return true if table is &lt;code&gt; hbase:meta &lt;/code&gt; region.<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   */<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  @Override<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  public boolean isMetaTable() {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    return delegatee.isMetaTable();<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>   * @return Getter for fetching an unmodifiable map.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   */<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  @Override<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  public Map&lt;Bytes, Bytes&gt; getValues() {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    return delegatee.getValues();<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>   * Setter for storing metadata as a (key, value) pair in map<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   *<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * @param key The key.<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   * @param value The value. If null, removes the setting.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   */<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  public HTableDescriptor setValue(byte[] key, byte[] value) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    getDelegateeForModification().setValue(key, value);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    return this;<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>   * Setter for storing metadata as a (key, value) pair in map<a name="line.178"></a>
+<span class="sourceLineNo">179</span>   *<a name="line.179"></a>
+<span class="sourceLineNo">180</span>   * @param key The key.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * @param value The value. If null, removes the setting.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   */<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  public HTableDescriptor setValue(final Bytes key, final Bytes value) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    getDelegateeForModification().setValue(key, value);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    return this;<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>   * Setter for storing metadata as a (key, value) pair in map<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   *<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * @param key The key.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   * @param value The value. If null, removes the setting.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>   */<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  public HTableDescriptor setValue(String key, String value) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    getDelegateeForModification().setValue(Bytes.toBytes(key), Bytes.toBytes(value));<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    return this;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  }<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>   * Remove metadata represented by the key from the map<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   *<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   * @param key Key whose key and value we're to remove from HTableDescriptor<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   * parameters.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  public void remove(final String key) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    getDelegateeForModification().removeValue(Bytes.toBytes(key));<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  }<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>  /**<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   * Remove metadata represented by the key from the map<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   *<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   * @param key Key whose key and value we're to remove from HTableDescriptor<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   * parameters.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   */<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  public void remove(Bytes key) {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    getDelegateeForModification().removeValue(key);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  }<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>  /**<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   * Remove metadata represented by the key from the map<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   *<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * @param key Key whose key and value we're to remove from HTableDescriptor<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * parameters.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   */<a name="line.224"></a>
+<span class="sourceLineNo">225</span>  public void remove(final byte [] key) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    getDelegateeForModification().removeValue(key);<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>  /**<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * Check if the readOnly flag of the table is set. If the readOnly flag is<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * set then the contents of the table can only be read from but not modified.<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   *<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @return true if all columns in the table should be read only<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  @Override<a name="line.235"></a>
+<span class="sourceLineNo">236</span>  public boolean isReadOnly() {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    return delegatee.isReadOnly();<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  }<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>  /**<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   * Setting the table as read only sets all the columns in the table as read<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * only. By default all tables are modifiable, but if the readOnly flag is<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   * set to true then the contents of the table can only be read but not modified.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   *<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   * @param readOnly True if all of the columns in the table should be read<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   * only.<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   */<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  public HTableDescriptor setReadOnly(final boolean readOnly) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    getDelegateeForModification().setReadOnly(readOnly);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    return this;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>  }<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * Check if the compaction enable flag of the table is true. If flag is<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   * false then no minor/major compactions will be done in real.<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   *<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   * @return true if table compaction enabled<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  @Override<a name="line.259"></a>
+<span class="sourceLineNo">260</span>  public boolean isCompactionEnabled() {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    return delegatee.isCompactionEnabled();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  }<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>  /**<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   * Setting the table compaction enable flag.<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   *<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   * @param isEnable True if enable compaction.<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   */<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  public HTableDescriptor setCompactionEnabled(final boolean isEnable) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    getDelegateeForModification().setCompactionEnabled(isEnable);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    return this;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>  }<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span>  /**<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * Check if normalization enable flag of the table is true. If flag is<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * false then no region normalizer won't attempt to normalize this table.<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   *<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   * @return true if region normalization is enabled for this table<a name="line.278"></a>
+<span class="sourceLineNo">279</span>   */<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  @Override<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  public boolean isNormalizationEnabled() {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    return delegatee.isNormalizationEnabled();<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>  /**<a name="line.285"></a>
+<span class="sourceLineNo">286</span>   * Setting the table normalization enable flag.<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   *<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * @param isEnable True if enable normalization.<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   */<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public HTableDescriptor setNormalizationEnabled(final boolean isEnable) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    getDelegateeForModification().setNormalizationEnabled(isEnable);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    return this;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>  @Override<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  public int getNormalizerTargetRegionCount() {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    return getDelegateeForModification().getNormalizerTargetRegionCount();<a name="line.297"></a>
 <span class="sourceLineNo">298</span>  }<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>   * Returns the durability setting for the table.<a name="line.301"></a>
-<span class="sourceLineNo">302</span>   * @return durability setting for the table.<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   */<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  @Override<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  public Durability getDurability() {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    return delegatee.getDurability();<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>  /**<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * Get the name of the table<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   *<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * @return TableName<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   */<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  @Override<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  public TableName getTableName() {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    return delegatee.getTableName();<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  }<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>  /**<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * Get the name of the table as a String<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   *<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * @return name of table as a String<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   */<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  public String getNameAsString() {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    return delegatee.getTableName().getNameAsString();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  }<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>  /**<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * This sets the class associated with the region split policy which<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * determines when a region split should occur.  The class used by<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * default is defined in org.apache.hadoop.hbase.regionserver.RegionSplitPolicy<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * @param clazz the class name<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  public HTableDescriptor setRegionSplitPolicyClassName(String clazz) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    getDelegateeForModification().setRegionSplitPolicyClassName(clazz);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    return this;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>  /**<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * This gets the class associated with the region split policy which<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * determines when a region split should occur.  The class used by<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * default is defined in org.apache.hadoop.hbase.regionserver.RegionSplitPolicy<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   *<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   * @return the class name of the region split policy for this table.<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   * If this returns null, the default split policy is used.<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   */<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  @Override<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   public String getRegionSplitPolicyClassName() {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    return delegatee.getRegionSplitPolicyClassName();<a name="line.349"></a>
+<span class="sourceLineNo">300</span>  public HTableDescriptor setNormalizerTargetRegionCount(final int regionCount) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    getDelegateeForModification().setNormalizerTargetRegionCount(regionCount);<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    return this;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>  }<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>  @Override<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  public long getNormalizerTargetRegionSize() {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    return getDelegateeForModification().getNormalizerTargetRegionSize();<a name="line.307"></a>
+<span class="sourceLineNo">308</span>  }<a name="line.308"></a>
+<span class="sourceLineNo">309</span><a name="line.309"></a>
+<span class="sourceLineNo">310</span>  public HTableDescriptor setNormalizerTargetRegionSize(final long regionSize) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    getDelegateeForModification().setNormalizerTargetRegionSize(regionSize);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    return this;<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 name="line.315"></a>
+<span class="sourceLineNo">316</span>   * Sets the {@link Durability} setting for the table. This defaults to Durability.USE_DEFAULT.<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * @param durability enum value<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   */<a name="line.318"></a>
+<span class="sourceLineNo">319</span>  public HTableDescriptor setDurability(Durability durability) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    getDelegateeForModification().setDurability(durability);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    return this;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>  }<a name="line.322"></a>
+<span class="sourceLineNo">323</span><a name="line.323"></a>
+<span class="sourceLineNo">324</span>  /**<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   * Returns the durability setting for the table.<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * @return durability setting for the table.<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   */<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  @Override<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  public Durability getDurability() {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    return delegatee.getDurability();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  }<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>  /**<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   * Get the name of the table<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   *<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   * @return TableName<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  @Override<a name="line.338"></a>
+<span class="sourceLineNo">339</span>  public TableName getTableName() {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    return delegatee.getTableName();<a name="line.340"></a>
+<span class="sourceLineNo">341</span>  }<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>  /**<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * Get the name of the table as a String<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   *<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * @return name of table as a String<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   */<a name="line.347"></a>
+<span class="sourceLineNo">348</span>  public String getNameAsString() {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    return delegatee.getTableName().getNameAsString();<a name="line.349"></a>
 <span class="sourceLineNo">350</span>  }<a name="line.350"></a>
 <span class="sourceLineNo">351</span><a name="line.351"></a>
 <span class="sourceLineNo">352</span>  /**<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   * Returns the maximum size upto which a region can grow to after which a region<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   * split is triggered. The region size is represented by the size of the biggest<a name="line.354"></a>
-<span class="sourceLineNo">355</span>   * store file in that region.<a name="line.355"></a>
-<span class="sourceLineNo">356</span>   *<a name="line.356"></a>
-<span class="sourceLineNo">357</span>   * @return max hregion size for table, -1 if not set.<a name="line.357"></a>
-<span class="sourceLineNo">358</span>   *<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * @see #setMaxFileSize(long)<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   */<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   @Override<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  public long getMaxFileSize() {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    return delegatee.getMaxFileSize();<a name="line.363"></a>
-<span class="sourceLineNo">364</span>  }<a name="line.364"></a>
-<span class="sourceLineNo">365</span><a name="line.365"></a>
-<span class="sourceLineNo">366</span>  /**<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * Sets the maximum size upto which a region can grow to after which a region<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * split is triggered. The region size is represented by the size of the biggest<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * store file in that region, i.e. If the biggest store file grows beyond the<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * maxFileSize, then the region split is triggered. This defaults to a value of<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * 256 MB.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   * &lt;p&gt;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * This is not an absolute value and might vary. Assume that a single row exceeds<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * the maxFileSize then the storeFileSize will be greater than maxFileSize since<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * a single row cannot be split across multiple regions<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   * &lt;/p&gt;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>   *<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   * @param maxFileSize The maximum file size that a store file can grow to<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * before a split is triggered.<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   */<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  public HTableDescriptor setMaxFileSize(long maxFileSize) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    getDelegateeForModification().setMaxFileSize(maxFileSize);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    return this;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  }<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>   * Returns the size of the memstore after which a flush to filesystem is triggered.<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   *<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @return memory cache flush size for each hregion, -1 if not set.<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   *<a name="line.390"></a>
-<span class="sourceLineNo">391</span>   * @see #setMemStoreFlushSize(long)<a name="line.391"></a>
-<span class="sourceLineNo">392</span>   */<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  @Override<a name="line.393"></a>
-<span class="sourceLineNo">394</span>  public long getMemStoreFlushSize() {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    return delegatee.getMemStoreFlushSize();<a name="line.395"></a>
-<span class="sourceLineNo">396</span>  }<a name="line.396"></a>
-<span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span>  /**<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * Represents the maximum size of the memstore after which the contents of the<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * memstore are flushed to the filesystem. This defaults to a size of 64 MB.<a name="line.400"></a>
+<span class="sourceLineNo">353</span>   * This sets the class associated with the region split policy which<a name="line.353"></a>
+<span class="sourceLineNo">354</span>   * determines when a region split should occur.  The class used by<a name="line.354"></a>
+<span class="sourceLineNo">355</span>   * default is defined in org.apache.hadoop.hbase.regionserver.RegionSplitPolicy<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * @param clazz the class name<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   */<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  public HTableDescriptor setRegionSplitPolicyClassName(String clazz) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    getDelegateeForModification().setRegionSplitPolicyClassName(clazz);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    return this;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
+<span class="sourceLineNo">362</span><a name="line.362"></a>
+<span class="sourceLineNo">363</span>  /**<a name="line.363"></a>
+<span class="sourceLineNo">364</span>   * This gets the class associated with the region split policy which<a name="line.364"></a>
+<span class="sourceLineNo">365</span>   * determines when a region split should occur.  The class used by<a name="line.365"></a>
+<span class="sourceLineNo">366</span>   * default is defined in org.apache.hadoop.hbase.regionserver.RegionSplitPolicy<a name="line.366"></a>
+<span class="sourceLineNo">367</span>   *<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   * @return the class name of the region split policy for this table.<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * If this returns null, the default split policy is used.<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   */<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  @Override<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   public String getRegionSplitPolicyClassName() {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    return delegatee.getRegionSplitPolicyClassName();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  }<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span>  /**<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * Returns the maximum size upto which a region can grow to after which a region<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * split is triggered. The region size is represented by the size of the biggest<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   * store file in that region.<a name="line.379"></a>
+<span class="sourceLineNo">380</span>   *<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   * @return max hregion size for table, -1 if not set.<a name="line.381"></a>
+<span class="sourceLineNo">382</span>   *<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   * @see #setMaxFileSize(long)<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   */<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   @Override<a name="line.385"></a>
+<span class="sourceLineNo">386</span>  public long getMaxFileSize() {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    return delegatee.getMaxFileSize();<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  /**<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * Sets the maximum size upto which a region can grow to after which a region<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * split is triggered. The region size is represented by the size of the biggest<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   * store file in that region, i.e. If the biggest store file grows beyond the<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * maxFileSize, then the region split is triggered. This defaults to a value of<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * 256 MB.<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * &lt;p&gt;<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   * This is not an absolute value and might vary. Assume that a single row exceeds<a name="line.397"></a>
+<span class="sourceLineNo">398</span>   * the maxFileSize then the storeFileSize will be greater than maxFileSize since<a name="line.398"></a>
+<span class="sourceLineNo">399</span>   * a single row cannot be split across multiple regions<a name="line.399"></a>
+<span class="sourceLineNo">400</span>   * &lt;/p&gt;<a name="line.400"></a>
 <span class="sourceLineNo">401</span>   *<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * @param memstoreFlushSize memory cache flush size for each hregion<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   */<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  public HTableDescriptor setMemStoreFlushSize(long memstoreFlushSize) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    getDelegateeForModification().setMemStoreFlushSize(memstoreFlushSize);<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    return this;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  }<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>   * This sets the class associated with the flush policy which determines determines the stores<a name="line.410"></a>
-<span class="sourceLineNo">411</span>   * need to be flushed when flushing a region. The class used by default is defined in<a name="line.411"></a>
-<span class="sourceLineNo">412</span>   * org.apache.hadoop.hbase.regionserver.FlushPolicy.<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * @param clazz the class name<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   */<a name="line.414"></a>
-<span class="sourceLineNo">415</span>  public HTableDescriptor setFlushPolicyClassName(String clazz) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    getDelegateeForModification().setFlushPolicyClassName(clazz);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    return this;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  }<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span>  /**<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * This gets the class associated with the flush policy which determines the stores need to be<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * flushed when flushing a region. The class used by default is defined in<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * org.apache.hadoop.hbase.regionserver.FlushPolicy.<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   * @return the class name of the flush policy for this table. If this returns null, the default<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   *         flush policy is used.<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   */<a name="line.426"></a>
-<span class="sourceLineNo">427</span>  @Override<a name="line.427"></a>
-<span class="sourceLineNo">428</span>  public String getFlushPolicyClassName() {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    return delegatee.getFlushPolicyClassName();<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  /**<a name="line.432"></a>
-<span class="sourceLineNo">433</span>   * Adds a column family.<a name="line.433"></a>
-<span class="sourceLineNo">434</span>   * For the updating purpose please use {@link #modifyFamily(HColumnDescriptor)} instead.<a name="line.434"></a>
-<span class="sourceLineNo">435</span>   * @param family HColumnDescriptor of family to add.<a name="line.435"></a>
-<span class="sourceLineNo">436</span>   */<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  public HTableDescriptor addFamily(final HColumnDescriptor family) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    getDelegateeForModification().setColumnFamily(family);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    return this;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>  }<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>  /**<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   * Modifies the existing column family.<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * @param family HColumnDescriptor of family to update<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * @return this (for chained invocation)<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   */<a name="line.446"></a>
-<span class="sourceLineNo">447</span>  public HTableDescriptor modifyFamily(final HColumnDescriptor family) {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    getDelegateeForModification().modifyColumnFamily(family);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    return this;<a name="line.449"></a>
-<span class="sourceLineNo">450</span>  }<a name="line.450"></a>
-<span class="sourceLineNo">451</span><a name="line.451"></a>
-<span class="sourceLineNo">452</span>  /**<a name="line.452"></a>
-<span class="sourceLineNo">453</span>   * Checks to see if this table contains the given column family<a name="line.453"></a>
-<span class="sourceLineNo">454</span>   * @param familyName Family name or column name.<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   * @return true if the table contains the specified family name<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   */<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  public boolean hasFamily(final byte [] familyName) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    return delegatee.hasColumnFamily(familyName);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>  }<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>  /**<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @return Name of this table and then a map of all of the column family<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * descriptors.<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @see #getNameAsString()<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   */<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  @Override<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  public String toString() {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    return delegatee.toString();<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>   * @return Name of this table and then a map of all of the column family<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * descriptors (with only the non-default column family attributes)<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   */<a name="line.474"></a>
-<span class="sourceLineNo">475</span>  public String toStringCustomizedValues() {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    return delegatee.toStringCustomizedValues();<a name="line.476"></a>
-<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
-<span class="sourceLineNo">478</span><a name="line.478"></a>
-<span class="sourceLineNo">479</span>  /**<a name="line.479"></a>
-<span class="sourceLineNo">480</span>   * @return map of all table attributes formatted into string.<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   */<a name="line.481"></a>
-<span class="sourceLineNo">482</span>  public String toStringTableAttributes() {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   return delegatee.toStringTableAttributes();<a name="line.483"></a>
-<span class="sourceLineNo">484</span>  }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>  /**<a name="line.486"></a>
-<span class="sourceLineNo">487</span>   * Compare the contents of the descriptor with another one passed as a parameter.<a name="line.487"></a>
-<span class="sourceLineNo">488</span>   * Checks if the obj passed is an instance of HTableDescriptor, if yes then the<a name="line.488"></a>
-<span class="sourceLineNo">489</span>   * contents of the descriptors are compared.<a name="line.489"></a>
-<span class="sourceLineNo">490</span>   *<a name="line.490"></a>
-<span class="sourceLineNo">491</span>   * @return true if the contents of the the two descriptors exactly match<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   *<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * @see java.lang.Object#equals(java.lang.Object)<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   */<a name="line.494"></a>
-<span class="sourceLineNo">495</span>  @Override<a name="line.495"></a>
-<span class="sourceLineNo">496</span>  public boolean equals(Object obj) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    if (this == obj) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      return true;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    }<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    if (obj instanceof HTableDescriptor) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      return delegatee.equals(((HTableDescriptor) obj).delegatee);<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    return false;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>  }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>  /**<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   * @see java.lang.Object#hashCode()<a name="line.507"></a>
-<span class="sourceLineNo">508</span>   */<a name="line.508"></a>
-<span class="sourceLineNo">509</span>  @Override<a name="line.509"></a>
-<span class="sourceLineNo">510</span>  public int hashCode() {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    return delegatee.hashCode();<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>  // Comparable<a name="line.514"></a>
-<span class="sourceLineNo">515</span><a name="line.515"></a>
-<span class="sourceLineNo">516</span>  /**<a name="line.516"></a>
-<span class="sourceLineNo">517</span>   * Compares the descriptor with another descriptor which is passed as a parameter.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>   * This compares the content of the two descriptors and not the reference.<a name="line.518"></a>
-<span class="sourceLineNo">519</span>   *<a name="line.519"></a>
-<span class="sourceLineNo">520</span>   * @return 0 if the contents of the descriptors are exactly matching,<a name="line.520"></a>
-<span class="sourceLineNo">521</span>   *         1 if there is a mismatch in the contents<a name="line.521"></a>
-<span class="sourceLineNo">522</span>   */<a name="line.522"></a>
-<span class="sourceLineNo">523</span>  @Override<a name="line.523"></a>
-<span class="sourceLineNo">524</span>  public int compareTo(final HTableDescriptor other) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    return TableDescriptor.COMPARATOR.compare(this, other);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>  /**<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * Returns an unmodifiable collection of all the {@link HColumnDescriptor}<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * of all the column families of the table.<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   * @deprecated Use {@link #getColumnFamilies}.<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   * @return Immutable collection of {@link HColumnDescriptor} of all the<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   * column families.<a name="line.533"></a>
-<span class="sourceLineNo">534</span>   */<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  @Deprecated<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  public Collection&lt;HColumnDescriptor&gt; getFamilies() {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    return Stream.of(delegatee.getColumnFamilies())<a name="line.537"></a>
-<span class="sourceLineNo">538</span>            .map(this::toHColumnDescriptor)<a name="line.538"></a>
-<span class="sourceLineNo">539</span>            .collect(Collectors.toList());<a name="line.539"></a>
-<span class="sourceLineNo">540</span>  }<a name="line.540"></a>
-<span class="sourceLineNo">541</span><a name="line.541"></a>
-<span class="sourceLineNo">542</span>  /**<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   * Returns the configured replicas per region<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   */<a name="line.544"></a>
-<span class="sourceLineNo">545</span>  @Override<a name="line.545"></a>
-<span class="sourceLineNo">546</span>  public int getRegionReplication() {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    return delegatee.getRegionReplication();<a name="line.547"></a>
-<span class="sourceLineNo">548</span>  }<a name="line.548"></a>
-<span class="sourceLineNo">549</span><a name="line.549"></a>
-<span class="sourceLineNo">550</span>  /**<a name="line.550"></a>
-<span class="sourceLineNo">551</span>   * Sets the number of replicas per region.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   * @param regionReplication the replication factor per region<a name="line.552"></a>
-<span class="sourceLineNo">553</span>   */<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  public HTableDescriptor setRegionReplication(int regionReplication) {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    getDelegateeForModification().setRegionReplication(regionReplication);<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    return this;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>  }<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>   * @deprecated As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   *             Use {@link #hasRegionMemStoreReplication()} instead<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   */<a name="line.562"></a>
-<span class="sourceLineNo">563</span>  @Deprecated<a name="line.563"></a>
-<span class="sourceLineNo">564</span>  public boolean hasRegionMemstoreReplication() {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    return hasRegionMemStoreReplication();<a name="line.565"></a>
-<span class="sourceLineNo">566</span>  }<a name="line.566"></a>
-<span class="sourceLineNo">567</span><a name="line.567"></a>
-<span class="sourceLineNo">568</span>  /**<a name="line.568"></a>
-<span class="sourceLineNo">569</span>   * @return true if the read-replicas memstore replication is enabled.<a name="line.569"></a>
-<span class="sourceLineNo">570</span>   */<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  @Override<a name="line.571"></a>
-<span class="sourceLineNo">572</span>  public boolean hasRegionMemStoreReplication() {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    return delegatee.hasRegionMemStoreReplication();<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>   * @deprecated As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.577"></a>
-<span class="sourceLineNo">578</span>   *             Use {@link #setRegionMemStoreReplication(boolean)} instead<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   */<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  @Deprecated<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  public HTableDescriptor setRegionMemstoreReplication(boolean memstoreReplication) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    return setRegionMemStoreReplication(memstoreReplication);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>  }<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>  /**<a name="line.585"></a>
-<span class="sourceLineNo">586</span>   * Enable or Disable the memstore replication from the primary region to the replicas.<a name="line.586"></a>
-<span class="sourceLineNo">587</span>   * The replication will be used only for meta operations (e.g. flush, compaction, ...)<a name="line.587"></a>
-<span class="sourceLineNo">588</span>   *<a name="line.588"></a>
-<span class="sourceLineNo">589</span>   * @param memstoreReplication true if the new data written to the primary region<a name="line.589"></a>
-<span class="sourceLineNo">590</span>   *                                 should be replicated.<a name="line.590"></a>
-<span class="sourceLineNo">591</span>   *                            false if the secondaries can tollerate to have new<a name="line.591"></a>
-<span class="sourceLineNo">592</span>   *                                  data only when the primary flushes the memstore.<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   */<a name="line.593"></a>
-<span class="sourceLineNo">594</span>  public HTableDescriptor setRegionMemStoreReplication(boolean memstoreReplication) {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>    getDelegateeForModification().setRegionMemStoreReplication(memstoreReplication);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    return this;<a name="line.596"></a>
-<span class="sourceLineNo">597</span>  }<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span>  public HTableDescriptor setPriority(int priority) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    getDelegateeForModification().setPriority(priority);<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    return this;<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  }<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>  @Override<a name="line.604"></a>
-<span class="sourceLineNo">605</span>  public int getPriority() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    return delegatee.getPriority();<a name="line.606"></a>
+<span class="sourceLineNo">402</span>   * @param maxFileSize The maximum file size that a store file can grow to<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * before a split is triggered.<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  public HTableDescriptor setMaxFileSize(long maxFileSize) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    getDelegateeForModification().setMaxFileSize(maxFileSize);<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    return this;<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>   * Returns the size of the memstore after which a flush to filesystem is triggered.<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   *<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   * @return memory cache flush size for each hregion, -1 if not set.<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   *<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * @see #setMemStoreFlushSize(long)<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 long getMemStoreFlushSize() {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    return delegatee.getMemStoreFlushSize();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>  }<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span>  /**<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * Represents the maximum size of the memstore after which the contents of the<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * memstore are flushed to the filesystem. This defaults to a size of 64 MB.<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   *<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * @param memstoreFlushSize memory cache flush size for each hregion<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   */<a name="line.427"></a>
+<span class="sourceLineNo">428</span>  public HTableDescriptor setMemStoreFlushSize(long memstoreFlushSize) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    getDelegateeForModification().setMemStoreFlushSize(memstoreFlushSize);<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    return this;<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>   * This sets the class associated with the flush policy which determines determines the stores<a name="line.434"></a>
+<span class="sourceLineNo">435</span>   * need to be flushed when flushing a region. The class used by default is defined in<a name="line.435"></a>
+<span class="sourceLineNo">436</span>   * org.apache.hadoop.hbase.regionserver.FlushPolicy.<a name="line.436"></a>
+<span class="sourceLineNo">437</span>   * @param clazz the class name<a name="line.437"></a>
+<span class="sourceLineNo">438</span>   */<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  public HTableDescriptor setFlushPolicyClassName(String clazz) {<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    getDelegateeForModification().setFlushPolicyClassName(clazz);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    return this;<a name="line.441"></a>
+<span class="sourceLineNo">442</span>  }<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span>  /**<a name="line.444"></a>
+<span class="sourceLineNo">445</span>   * This gets the class associated with the flush policy which determines the stores need to be<a name="line.445"></a>
+<span class="sourceLineNo">446</span>   * flushed when flushing a region. The class used by default is defined in<a name="line.446"></a>
+<span class="sourceLineNo">447</span>   * org.apache.hadoop.hbase.regionserver.FlushPolicy.<a name="line.447"></a>
+<span class="sourceLineNo">448</span>   * @return the class name of the flush policy for this table. If this returns null, the default<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   *         flush policy is used.<a name="line.449"></a>
+<span class="sourceLineNo">450</span>   */<a name="line.450"></a>
+<span class="sourceLineNo">451</span>  @Override<a name="line.451"></a>
+<span class="sourceLineNo">452</span>  public String getFlushPolicyClassName() {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    return delegatee.getFlushPolicyClassName();<a name="line.453"></a>
+<span class="sourceLineNo">454</span>  }<a name="line.454"></a>
+<span class="sourceLineNo">455</span><a name="line.455"></a>
+<span class="sourceLineNo">456</span>  /**<a name="line.456"></a>
+<span class="sourceLineNo">457</span>   * Adds a column family.<a name="line.457"></a>
+<span class="sourceLineNo">458</span>   * For the updating purpose please use {@link #modifyFamily(HColumnDescriptor)} instead.<a name="line.458"></a>
+<span class="sourceLineNo">459</span>   * @param family HColumnDescriptor of family to add.<a name="line.459"></a>
+<span class="sourceLineNo">460</span>   */<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  public HTableDescriptor addFamily(final HColumnDescriptor family) {<a name="line.461"></a>
+<span class="sourceLineNo">462</span>    getDelegateeForModification().setColumnFamily(family);<a name="line.462"></a>
+<span class="sourceLineNo">463</span>    return this;<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  }<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>   * Modifies the existing column family.<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * @param family HColumnDescriptor of family to update<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   * @return this (for chained invocation)<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   */<a name="line.470"></a>
+<span class="sourceLineNo">471</span>  public HTableDescriptor modifyFamily(final HColumnDescriptor family) {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    getDelegateeForModification().modifyColumnFamily(family);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    return this;<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  }<a name="line.474"></a>
+<span class="sourceLineNo">475</span><a name="line.475"></a>
+<span class="sourceLineNo">476</span>  /**<a name="line.476"></a>
+<span class="sourceLineNo">477</span>   * Checks to see if this table contains the given column family<a name="line.477"></a>
+<span class="sourceLineNo">478</span>   * @param familyName Family name or column name.<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   * @return true if the table contains the specified family name<a name="line.479"></a>
+<span class="sourceLineNo">480</span>   */<a name="line.480"></a>
+<span class="sourceLineNo">481</span>  public boolean hasFamily(final byte [] familyName) {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    return delegatee.hasColumnFamily(familyName);<a name="line.482"></a>
+<span class="sourceLineNo">483</span>  }<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>  /**<a name="line.485"></a>
+<span class="sourceLineNo">486</span>   * @return Name of this table and then a map of all of the col

<TRUNCATED>

[02/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/downloads.html
----------------------------------------------------------------------
diff --git a/downloads.html b/downloads.html
index cbb8ca4..58d6eab 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase Downloads</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -423,7 +423,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-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index 3eb6699..278a955 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Export Control
@@ -331,7 +331,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-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index d441891..b48a6d6 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBaseâ„¢ Home</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -411,7 +411,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-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index 48e5a7f..855499e 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -291,7 +291,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index d1ae5cd..dba9d67 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -288,7 +288,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index 740a33e..bed3147 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -491,7 +491,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index 02cb1d0..81f6e4f 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-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-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index 5aa4245..a6d7301 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) Metrics
@@ -459,7 +459,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-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index a34ba2a..cf2e648 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Old Apache HBase (TM) News
@@ -440,7 +440,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-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index d9805f2..418ce12 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -440,7 +440,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index bc3e2c6..fa00575 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -375,7 +375,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index bfb8074..97557da 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <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.5-HBASE.min.css" />
@@ -769,7 +769,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-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index 17a7d7e..d38e641 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -335,7 +335,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index 5901b45..6c7456b 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -305,7 +305,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index d134457..ab31829 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -331,7 +331,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 4ce4a6e..827e9c3 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
 Running Apache HBase (TM) in pseudo-distributed mode
@@ -308,7 +308,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-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index 89527f6..2a756ec 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Apache HBase (TM) Replication
@@ -303,7 +303,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-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index 237460a..2b7b5ef 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <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.5-HBASE.min.css" />
@@ -331,7 +331,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-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index 0a63034..c6035ff 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -299,7 +299,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 15264b8..eb78b32 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase™ Sponsors</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -333,7 +333,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-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index d188f56..5899a88 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Supporting Projects</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -520,7 +520,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-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index afb4846..dd71a97 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -748,7 +748,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index d015120..d8b1d64 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -61978,6 +61978,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAccessController.html#testSplitWithSplitRow--">testSplitWithSplitRow()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAccessController.html" title="class in org.apache.hadoop.hbase.security.access">TestAccessController</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#testSplitWithTargetRegionCount--">testSplitWithTargetRegionCount()</a></span> - Method in class org.apache.hadoop.hbase.master.normalizer.<a href="org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html" title="class in org.apache.hadoop.hbase.master.normalizer">TestSimpleRegionNormalizer</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#testSplitWithTargetRegionSize--">testSplitWithTargetRegionSize()</a></span> - Method in class org.apache.hadoop.hbase.master.normalizer.<a href="org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html" title="class in org.apache.hadoop.hbase.master.normalizer">TestSimpleRegionNormalizer</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/http/TestSpnegoHttpServer.html" title="class in org.apache.hadoop.hbase.http"><span class="typeNameLink">TestSpnegoHttpServer</span></a> - Class in <a href="org/apache/hadoop/hbase/http/package-summary.html">org.apache.hadoop.hbase.http</a></dt>
 <dd>
 <div class="block">Test class for SPNEGO authentication on the HttpServer.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/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 6af42fe..2d9b60f 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/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>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/testdevapidocs/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html b/testdevapidocs/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html
index af720e3..f169346 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10};
+var methods = {"i0":9,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":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/normalizer/TestSimpleRegionNormalizer.html#line.62">TestSimpleRegionNormalizer</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.63">TestSimpleRegionNormalizer</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Tests logic of <code>SimpleRegionNormalizer</code>.</div>
 </li>
@@ -227,6 +227,14 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#testSplitOfLargeRegion--">testSplitOfLargeRegion</a></span>()</code>&nbsp;</td>
 </tr>
+<tr id="i10" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#testSplitWithTargetRegionCount--">testSplitWithTargetRegionCount</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i11" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#testSplitWithTargetRegionSize--">testSplitWithTargetRegionSize</a></span>()</code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -255,7 +263,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/normalizer/TestSimpleRegionNormalizer.html#line.65">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/normalizer/TestSimpleRegionNormalizer.html#line.66">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="LOG">
@@ -264,7 +272,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/normalizer/TestSimpleRegionNormalizer.html#line.68">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.69">LOG</a></pre>
 </li>
 </ul>
 <a name="normalizer">
@@ -273,7 +281,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>normalizer</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.master.normalizer.RegionNormalizer <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.70">normalizer</a></pre>
+<pre>private static&nbsp;org.apache.hadoop.hbase.master.normalizer.RegionNormalizer <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.71">normalizer</a></pre>
 </li>
 </ul>
 <a name="masterServices">
@@ -282,7 +290,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>masterServices</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.master.MasterServices <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.73">masterServices</a></pre>
+<pre>private static&nbsp;org.apache.hadoop.hbase.master.MasterServices <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.74">masterServices</a></pre>
 </li>
 </ul>
 <a name="masterRpcServices">
@@ -291,7 +299,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>masterRpcServices</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.master.MasterRpcServices <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.74">masterRpcServices</a></pre>
+<pre>private static&nbsp;org.apache.hadoop.hbase.master.MasterRpcServices <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.75">masterRpcServices</a></pre>
 </li>
 </ul>
 <a name="name">
@@ -300,7 +308,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/normalizer/TestSimpleRegionNormalizer.html#line.77">name</a></pre>
+<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.78">name</a></pre>
 </li>
 </ul>
 </li>
@@ -317,7 +325,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestSimpleRegionNormalizer</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.62">TestSimpleRegionNormalizer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.63">TestSimpleRegionNormalizer</a>()</pre>
 </li>
 </ul>
 </li>
@@ -334,7 +342,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/normalizer/TestSimpleRegionNormalizer.html#line.80">beforeAllTests</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.81">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>
@@ -348,7 +356,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testPlanComparator</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.85">testPlanComparator</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.86">testPlanComparator</a>()</pre>
 </li>
 </ul>
 <a name="testNoNormalizationForMetaTable--">
@@ -357,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>testNoNormalizationForMetaTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.101">testNoNormalizationForMetaTable</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.102">testNoNormalizationForMetaTable</a>()
                                      throws org.apache.hadoop.hbase.HBaseIOException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -371,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>testNoNormalizationIfTooFewRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.112">testNoNormalizationIfTooFewRegions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.113">testNoNormalizationIfTooFewRegions</a>()
                                         throws org.apache.hadoop.hbase.HBaseIOException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -385,7 +393,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testNoNormalizationOnNormalizedCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.136">testNoNormalizationOnNormalizedCluster</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.137">testNoNormalizationOnNormalizedCluster</a>()
                                             throws org.apache.hadoop.hbase.HBaseIOException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -399,7 +407,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testMergeOfSmallRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.174">testMergeOfSmallRegions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.175">testMergeOfSmallRegions</a>()
                              throws org.apache.hadoop.hbase.HBaseIOException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -413,7 +421,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testMergeOfSecondSmallestRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.225">testMergeOfSecondSmallestRegions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.226">testMergeOfSecondSmallestRegions</a>()
                                       throws org.apache.hadoop.hbase.HBaseIOException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -427,7 +435,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testMergeOfSmallNonAdjacentRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.282">testMergeOfSmallNonAdjacentRegions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.283">testMergeOfSmallNonAdjacentRegions</a>()
                                         throws org.apache.hadoop.hbase.HBaseIOException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -441,7 +449,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testSplitOfLargeRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.329">testSplitOfLargeRegion</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.330">testSplitOfLargeRegion</a>()
                             throws org.apache.hadoop.hbase.HBaseIOException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -449,13 +457,41 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="testSplitWithTargetRegionCount--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testSplitWithTargetRegionCount</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.372">testSplitWithTargetRegionCount</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="testSplitWithTargetRegionSize--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testSplitWithTargetRegionSize</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.431">testSplitWithTargetRegionSize</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="setupMocksForNormalizer-java.util.Map-java.util.List-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>setupMocksForNormalizer</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.371">setupMocksForNormalizer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<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;regionSizes,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.html#line.480">setupMocksForNormalizer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<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;regionSizes,
                                        <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;org.apache.hadoop.hbase.client.RegionInfo&gt;&nbsp;RegionInfo)</pre>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/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 0747dbb..dcaab8c 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -576,15 +576,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/IntegrationTestRegionReplicaPerf.Stat.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestRegionReplicaPerf.Stat</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterManager.ServiceType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterManager.ServiceType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.ACTION.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestDDLMasterFailover.ACTION</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.RoleCommand.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleCommand</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.Stat.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestRegionReplicaPerf.Stat</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.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/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/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/75e49c45/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 684d8ff..ea63e96 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -669,10 +669,10 @@
 <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/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/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/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 7cc4b3a..e23761b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
@@ -253,10 +253,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestLoadAndVerify.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/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/IntegrationTestWithCellVisibilityLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestWithCellVisibilityLoadAndVerify.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Verify.Counts</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestLoadAndVerify.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/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/75e49c45/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 5282059..b21ae88 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -142,8 +142,8 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.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>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/TestWALSplit.Corruptions.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">TestWALSplit.Corruptions</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/FaultyFSLog.FailureType.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">FaultyFSLog.FailureType</span></a></li>
 </ul>
 </li>
 </ul>


[10/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureRetainer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureRetainer.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureRetainer.html
index 9c54904..0a656db 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureRetainer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureRetainer.html
@@ -1371,589 +1371,581 @@
 <span class="sourceLineNo">1363</span>    assert subprocStack != null : "Called rollback with no steps executed rootProc=" + rootProc;<a name="line.1363"></a>
 <span class="sourceLineNo">1364</span><a name="line.1364"></a>
 <span class="sourceLineNo">1365</span>    int stackTail = subprocStack.size();<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>    boolean reuseLock = false;<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>    while (stackTail --&gt; 0) {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>      Procedure&lt;TEnvironment&gt; proc = subprocStack.get(stackTail);<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span><a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>      LockState lockState;<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>      if (!reuseLock &amp;&amp; (lockState = acquireLock(proc)) != LockState.LOCK_ACQUIRED) {<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>        // can't take a lock on the procedure, add the root-proc back on the<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>        // queue waiting for the lock availability<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>        return lockState;<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>      }<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span><a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      lockState = executeRollback(proc);<a name="line.1377"></a>
+<span class="sourceLineNo">1366</span>    while (stackTail-- &gt; 0) {<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>      Procedure&lt;TEnvironment&gt; proc = subprocStack.get(stackTail);<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span><a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>      LockState lockState = acquireLock(proc);<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>      if (lockState != LockState.LOCK_ACQUIRED) {<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>        // can't take a lock on the procedure, add the root-proc back on the<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>        // queue waiting for the lock availability<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>        return lockState;<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>      }<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span><a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>      lockState = executeRollback(proc);<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      releaseLock(proc, false);<a name="line.1377"></a>
 <span class="sourceLineNo">1378</span>      boolean abortRollback = lockState != LockState.LOCK_ACQUIRED;<a name="line.1378"></a>
 <span class="sourceLineNo">1379</span>      abortRollback |= !isRunning() || !store.isRunning();<a name="line.1379"></a>
 <span class="sourceLineNo">1380</span><a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      // If the next procedure is the same to this one<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      // (e.g. StateMachineProcedure reuse the same instance)<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      // we can avoid to lock/unlock each step<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>      reuseLock = stackTail &gt; 0 &amp;&amp; (subprocStack.get(stackTail - 1) == proc) &amp;&amp; !abortRollback;<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>      if (!reuseLock &amp;&amp; proc.hasLock()) {<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        releaseLock(proc, false);<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>      }<a name="line.1387"></a>
+<span class="sourceLineNo">1381</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      // useful to test the procedure recovery.<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>      if (abortRollback) {<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>        return lockState;<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>      }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span><a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>      subprocStack.remove(stackTail);<a name="line.1387"></a>
 <span class="sourceLineNo">1388</span><a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>      // useful to test the procedure recovery.<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      if (abortRollback) {<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>        return lockState;<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>      }<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span><a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>      subprocStack.remove(stackTail);<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span><a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>      if (proc.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>        return LockState.LOCK_YIELD_WAIT;<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>      }<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span><a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>      if (proc != rootProc) {<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>        execCompletionCleanup(proc);<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      }<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>    }<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span><a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    // Finalize the procedure state<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>    LOG.info("Rolled back " + rootProc +<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>             " exec-time=" + StringUtils.humanTimeDiff(rootProc.elapsedTime()));<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>    procedureFinished(rootProc);<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>    return LockState.LOCK_ACQUIRED;<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>  }<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span><a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>  /**<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>   * Execute the rollback of the procedure step.<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>   * It updates the store with the new state (stack index)<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>   * or will remove completly the procedure in case it is a child.<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>   */<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>  private LockState executeRollback(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>    try {<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>      proc.doRollback(getEnvironment());<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>    } catch (IOException e) {<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>      LOG.debug("Roll back attempt failed for {}", proc, e);<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>    } catch (InterruptedException e) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>      handleInterruptedException(proc, e);<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>    } catch (Throwable e) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>      LOG.error(HBaseMarkers.FATAL, "CODE-BUG: Uncaught runtime exception for " + proc, e);<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>    }<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span><a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>    // allows to kill the executor before something is stored to the wal.<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>    // useful to test the procedure recovery.<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>    if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate()) {<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>      String msg = "TESTING: Kill before store update";<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>      LOG.debug(msg);<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      stop();<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>      throw new RuntimeException(msg);<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    }<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span><a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>    if (proc.removeStackIndex()) {<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      proc.setState(ProcedureState.ROLLEDBACK);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span><a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      // update metrics on finishing the procedure (fail)<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>      proc.updateMetricsOnFinish(getEnvironment(), proc.elapsedTime(), false);<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span><a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>      if (proc.hasParent()) {<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>        store.delete(proc.getProcId());<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>        procedures.remove(proc.getProcId());<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      } else {<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>        final long[] childProcIds = rollbackStack.get(proc.getProcId()).getSubprocedureIds();<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>        if (childProcIds != null) {<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>          store.delete(proc, childProcIds);<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>        } else {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>          store.update(proc);<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>        }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      }<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>    } else {<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>      store.update(proc);<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    }<a name="line.1461"></a>
+<span class="sourceLineNo">1389</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>      if (proc.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        return LockState.LOCK_YIELD_WAIT;<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span><a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      if (proc != rootProc) {<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>        execCompletionCleanup(proc);<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>      }<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>    }<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span><a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>    // Finalize the procedure state<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>    LOG.info("Rolled back " + rootProc +<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>             " exec-time=" + StringUtils.humanTimeDiff(rootProc.elapsedTime()));<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>    procedureFinished(rootProc);<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>    return LockState.LOCK_ACQUIRED;<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>  }<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span><a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>  /**<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>   * Execute the rollback of the procedure step.<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>   * It updates the store with the new state (stack index)<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>   * or will remove completly the procedure in case it is a child.<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>   */<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>  private LockState executeRollback(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>    try {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>      proc.doRollback(getEnvironment());<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>    } catch (IOException e) {<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      LOG.debug("Roll back attempt failed for {}", proc, e);<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>    } catch (InterruptedException e) {<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>      handleInterruptedException(proc, e);<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>    } catch (Throwable e) {<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>      LOG.error(HBaseMarkers.FATAL, "CODE-BUG: Uncaught runtime exception for " + proc, e);<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>    }<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span><a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>    // allows to kill the executor before something is stored to the wal.<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    // useful to test the procedure recovery.<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>    if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate()) {<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>      String msg = "TESTING: Kill before store update";<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      LOG.debug(msg);<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      stop();<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>      throw new RuntimeException(msg);<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>    }<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span><a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>    if (proc.removeStackIndex()) {<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>      proc.setState(ProcedureState.ROLLEDBACK);<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span><a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>      // update metrics on finishing the procedure (fail)<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>      proc.updateMetricsOnFinish(getEnvironment(), proc.elapsedTime(), false);<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span><a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>      if (proc.hasParent()) {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>        store.delete(proc.getProcId());<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>        procedures.remove(proc.getProcId());<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      } else {<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>        final long[] childProcIds = rollbackStack.get(proc.getProcId()).getSubprocedureIds();<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>        if (childProcIds != null) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>          store.delete(proc, childProcIds);<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>        } else {<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>          store.update(proc);<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>        }<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>      }<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>    } else {<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>      store.update(proc);<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>    }<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span><a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>    return LockState.LOCK_ACQUIRED;<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>  }<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span><a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>  private void yieldProcedure(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>    releaseLock(proc, false);<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    scheduler.yield(proc);<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>  }<a name="line.1461"></a>
 <span class="sourceLineNo">1462</span><a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>    return LockState.LOCK_ACQUIRED;<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>  }<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span><a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>  private void yieldProcedure(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>    releaseLock(proc, false);<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>    scheduler.yield(proc);<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>  }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span><a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>  /**<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>   * Executes &lt;code&gt;procedure&lt;/code&gt;<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>   * &lt;ul&gt;<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>   *  &lt;li&gt;Calls the doExecute() of the procedure<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>   *  &lt;li&gt;If the procedure execution didn't fail (i.e. valid user input)<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>   *  &lt;ul&gt;<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>   *    &lt;li&gt;...and returned subprocedures<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>   *    &lt;ul&gt;&lt;li&gt;The subprocedures are initialized.<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>   *      &lt;li&gt;The subprocedures are added to the store<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>   *      &lt;li&gt;The subprocedures are added to the runnable queue<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>   *      &lt;li&gt;The procedure is now in a WAITING state, waiting for the subprocedures to complete<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>   *    &lt;/ul&gt;<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>   *    &lt;/li&gt;<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>   *   &lt;li&gt;...if there are no subprocedure<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>   *    &lt;ul&gt;&lt;li&gt;the procedure completed successfully<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>   *      &lt;li&gt;if there is a parent (WAITING)<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>   *      &lt;li&gt;the parent state will be set to RUNNABLE<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>   *    &lt;/ul&gt;<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>   *   &lt;/li&gt;<a name="line.1489"></a>
+<span class="sourceLineNo">1463</span>  /**<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>   * Executes &lt;code&gt;procedure&lt;/code&gt;<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>   * &lt;ul&gt;<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>   *  &lt;li&gt;Calls the doExecute() of the procedure<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>   *  &lt;li&gt;If the procedure execution didn't fail (i.e. valid user input)<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>   *  &lt;ul&gt;<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>   *    &lt;li&gt;...and returned subprocedures<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>   *    &lt;ul&gt;&lt;li&gt;The subprocedures are initialized.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>   *      &lt;li&gt;The subprocedures are added to the store<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>   *      &lt;li&gt;The subprocedures are added to the runnable queue<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>   *      &lt;li&gt;The procedure is now in a WAITING state, waiting for the subprocedures to complete<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>   *    &lt;/ul&gt;<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>   *    &lt;/li&gt;<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>   *   &lt;li&gt;...if there are no subprocedure<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>   *    &lt;ul&gt;&lt;li&gt;the procedure completed successfully<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>   *      &lt;li&gt;if there is a parent (WAITING)<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>   *      &lt;li&gt;the parent state will be set to RUNNABLE<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>   *    &lt;/ul&gt;<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>   *   &lt;/li&gt;<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>   *  &lt;/ul&gt;<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>   *  &lt;/li&gt;<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>   *  &lt;li&gt;In case of failure<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>   *  &lt;ul&gt;<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>   *    &lt;li&gt;The store is updated with the new state&lt;/li&gt;<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>   *    &lt;li&gt;The executor (caller of this method) will start the rollback of the procedure&lt;/li&gt;<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>   *  &lt;/ul&gt;<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>   *  &lt;/li&gt;<a name="line.1489"></a>
 <span class="sourceLineNo">1490</span>   *  &lt;/ul&gt;<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>   *  &lt;/li&gt;<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>   *  &lt;li&gt;In case of failure<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>   *  &lt;ul&gt;<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>   *    &lt;li&gt;The store is updated with the new state&lt;/li&gt;<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>   *    &lt;li&gt;The executor (caller of this method) will start the rollback of the procedure&lt;/li&gt;<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>   *  &lt;/ul&gt;<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>   *  &lt;/li&gt;<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>   *  &lt;/ul&gt;<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>   */<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  private void execProcedure(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>    Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>        "NOT RUNNABLE! " + procedure.toString());<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span><a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    // Procedures can suspend themselves. They skip out by throwing a ProcedureSuspendedException.<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    // The exception is caught below and then we hurry to the exit without disturbing state. The<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>    // idea is that the processing of this procedure will be unsuspended later by an external event<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>    // such the report of a region open.<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    boolean suspended = false;<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span><a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    // Whether to 're-' -execute; run through the loop again.<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>    boolean reExecute = false;<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span><a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    Procedure&lt;TEnvironment&gt;[] subprocs = null;<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>    do {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>      reExecute = false;<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>      try {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>        subprocs = procedure.doExecute(getEnvironment());<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>        if (subprocs != null &amp;&amp; subprocs.length == 0) {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>          subprocs = null;<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        }<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      } catch (ProcedureSuspendedException e) {<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        LOG.trace("Suspend {}", procedure);<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>        suspended = true;<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>      } catch (ProcedureYieldException e) {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>        LOG.trace("Yield {}", procedure, e);<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>        yieldProcedure(procedure);<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>        return;<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      } catch (InterruptedException e) {<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        LOG.trace("Yield interrupt {}", procedure, e);<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>        handleInterruptedException(procedure, e);<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>        yieldProcedure(procedure);<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>        return;<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>      } catch (Throwable e) {<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>        // Catch NullPointerExceptions or similar errors...<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>        String msg = "CODE-BUG: Uncaught runtime exception: " + procedure;<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>        LOG.error(msg, e);<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>        procedure.setFailure(new RemoteProcedureException(msg, e));<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>      }<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span><a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      if (!procedure.isFailed()) {<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>        if (subprocs != null) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>          if (subprocs.length == 1 &amp;&amp; subprocs[0] == procedure) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>            // Procedure returned itself. Quick-shortcut for a state machine-like procedure;<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>            // i.e. we go around this loop again rather than go back out on the scheduler queue.<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>            subprocs = null;<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>            reExecute = true;<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>            LOG.trace("Short-circuit to next step on pid={}", procedure.getProcId());<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          } else {<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>            // Yield the current procedure, and make the subprocedure runnable<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>            // subprocs may come back 'null'.<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            subprocs = initializeChildren(procStack, procedure, subprocs);<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            LOG.info("Initialized subprocedures=" +<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>              (subprocs == null? null:<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>                Stream.of(subprocs).map(e -&gt; "{" + e.toString() + "}").<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>                collect(Collectors.toList()).toString()));<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>          }<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>        } else if (procedure.getState() == ProcedureState.WAITING_TIMEOUT) {<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>          LOG.trace("Added to timeoutExecutor {}", procedure);<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>          timeoutExecutor.add(procedure);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>        } else if (!suspended) {<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>          // No subtask, so we are done<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>          procedure.setState(ProcedureState.SUCCESS);<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        }<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      }<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span><a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>      // Add the procedure to the stack<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      procStack.addRollbackStep(procedure);<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span><a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      // useful to test the procedure recovery.<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>      if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate(suspended)) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>        String msg = "TESTING: Kill before store update: " + procedure;<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>        LOG.debug(msg);<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>        stop();<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        throw new RuntimeException(msg);<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>      }<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span><a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>      //<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      // Commit the transaction even if a suspend (state may have changed). Note this append<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      // can take a bunch of time to complete.<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span><a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      // if the store is not running we are aborting<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      if (!store.isRunning()) {<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>        return;<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>      }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>        yieldProcedure(procedure);<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>        return;<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>      }<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>    } while (reExecute);<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    // Submit the new subprocedures<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>      submitChildrenProcedures(subprocs);<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>    }<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span><a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>    // we need to log the release lock operation before waking up the parent procedure, as there<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    // could be race that the parent procedure may call updateStoreOnExec ahead of us and remove all<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>    // the sub procedures from store and cause problems...<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    releaseLock(procedure, false);<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span><a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>    // if the procedure is complete and has a parent, count down the children latch.<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>    // If 'suspended', do nothing to change state -- let other threads handle unsuspend event.<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    if (!suspended &amp;&amp; procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      countDownChildren(procStack, procedure);<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span><a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>  private Procedure&lt;TEnvironment&gt;[] initializeChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    assert subprocs != null : "expected subprocedures";<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      if (subproc == null) {<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>          new IllegalArgumentIOException(msg)));<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>        return null;<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>      }<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span><a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>      subproc.setRootProcId(rootProcId);<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>      subproc.setProcId(nextProcId());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>      procStack.addSubProcedure(subproc);<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>    }<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span><a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    if (!procedure.isFailed()) {<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>      switch (procedure.getState()) {<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>        case RUNNABLE:<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>          break;<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>        case WAITING_TIMEOUT:<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>          timeoutExecutor.add(procedure);<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>          break;<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>        default:<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>          break;<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>      }<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>    }<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    return subprocs;<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>  }<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span><a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>  private void submitChildrenProcedures(Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>      subproc.updateMetricsOnSubmit(getEnvironment());<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      scheduler.addFront(subproc);<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>  }<a name="line.1663"></a>
+<span class="sourceLineNo">1491</span>   */<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>  private void execProcedure(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>    Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>        "NOT RUNNABLE! " + procedure.toString());<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span><a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>    // Procedures can suspend themselves. They skip out by throwing a ProcedureSuspendedException.<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>    // The exception is caught below and then we hurry to the exit without disturbing state. The<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>    // idea is that the processing of this procedure will be unsuspended later by an external event<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>    // such the report of a region open.<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>    boolean suspended = false;<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span><a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    // Whether to 're-' -execute; run through the loop again.<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>    boolean reExecute = false;<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span><a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>    Procedure&lt;TEnvironment&gt;[] subprocs = null;<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>    do {<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>      reExecute = false;<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      try {<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>        subprocs = procedure.doExecute(getEnvironment());<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>        if (subprocs != null &amp;&amp; subprocs.length == 0) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>          subprocs = null;<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        }<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>      } catch (ProcedureSuspendedException e) {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>        LOG.trace("Suspend {}", procedure);<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>        suspended = true;<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>      } catch (ProcedureYieldException e) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>        LOG.trace("Yield {}", procedure, e);<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>        yieldProcedure(procedure);<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>        return;<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>      } catch (InterruptedException e) {<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        LOG.trace("Yield interrupt {}", procedure, e);<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>        handleInterruptedException(procedure, e);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>        yieldProcedure(procedure);<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>        return;<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      } catch (Throwable e) {<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>        // Catch NullPointerExceptions or similar errors...<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>        String msg = "CODE-BUG: Uncaught runtime exception: " + procedure;<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>        LOG.error(msg, e);<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>        procedure.setFailure(new RemoteProcedureException(msg, e));<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>      }<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span><a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      if (!procedure.isFailed()) {<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>        if (subprocs != null) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>          if (subprocs.length == 1 &amp;&amp; subprocs[0] == procedure) {<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>            // Procedure returned itself. Quick-shortcut for a state machine-like procedure;<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>            // i.e. we go around this loop again rather than go back out on the scheduler queue.<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>            subprocs = null;<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>            reExecute = true;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>            LOG.trace("Short-circuit to next step on pid={}", procedure.getProcId());<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>          } else {<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>            // Yield the current procedure, and make the subprocedure runnable<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>            // subprocs may come back 'null'.<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>            subprocs = initializeChildren(procStack, procedure, subprocs);<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>            LOG.info("Initialized subprocedures=" +<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>              (subprocs == null? null:<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>                Stream.of(subprocs).map(e -&gt; "{" + e.toString() + "}").<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>                collect(Collectors.toList()).toString()));<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>          }<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>        } else if (procedure.getState() == ProcedureState.WAITING_TIMEOUT) {<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>          LOG.trace("Added to timeoutExecutor {}", procedure);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>          timeoutExecutor.add(procedure);<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>        } else if (!suspended) {<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          // No subtask, so we are done<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          procedure.setState(ProcedureState.SUCCESS);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>        }<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>      }<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span><a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>      // Add the procedure to the stack<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>      procStack.addRollbackStep(procedure);<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span><a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>      // useful to test the procedure recovery.<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>      if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate(suspended)) {<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>        String msg = "TESTING: Kill before store update: " + procedure;<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        LOG.debug(msg);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>        stop();<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>        throw new RuntimeException(msg);<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>      }<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span><a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      //<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>      // Commit the transaction even if a suspend (state may have changed). Note this append<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>      // can take a bunch of time to complete.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span><a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      // if the store is not running we are aborting<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>      if (!store.isRunning()) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>        return;<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>      }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>        yieldProcedure(procedure);<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>        return;<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>      }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>    } while (reExecute);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>    // Submit the new subprocedures<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      submitChildrenProcedures(subprocs);<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>    }<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span><a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    // we need to log the release lock operation before waking up the parent procedure, as there<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    // could be race that the parent procedure may call updateStoreOnExec ahead of us and remove all<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    // the sub procedures from store and cause problems...<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    releaseLock(procedure, false);<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span><a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    // if the procedure is complete and has a parent, count down the children latch.<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>    // If 'suspended', do nothing to change state -- let other threads handle unsuspend event.<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    if (!suspended &amp;&amp; procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      countDownChildren(procStack, procedure);<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>    }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>  }<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span><a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>  private Procedure&lt;TEnvironment&gt;[] initializeChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    assert subprocs != null : "expected subprocedures";<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>      if (subproc == null) {<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>          new IllegalArgumentIOException(msg)));<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>        return null;<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>      }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span><a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      subproc.setRootProcId(rootProcId);<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      subproc.setProcId(nextProcId());<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      procStack.addSubProcedure(subproc);<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>    }<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span><a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>    if (!procedure.isFailed()) {<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>      switch (procedure.getState()) {<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>        case RUNNABLE:<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>          break;<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        case WAITING_TIMEOUT:<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>          timeoutExecutor.add(procedure);<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>          break;<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>        default:<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          break;<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>      }<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>    }<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    return subprocs;<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>  }<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span><a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>  private void submitChildrenProcedures(Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>      subproc.updateMetricsOnSubmit(getEnvironment());<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>      scheduler.addFront(subproc);<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    }<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>  }<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span><a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>  private void countDownChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    Procedure&lt;TEnvironment&gt; parent = procedures.get(procedure.getParentProcId());<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    if (parent == null) {<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>      assert procStack.isRollingback();<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>      return;<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    }<a name="line.1663"></a>
 <span class="sourceLineNo">1664</span><a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>  private void countDownChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>    Procedure&lt;TEnvironment&gt; parent = procedures.get(procedure.getParentProcId());<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    if (parent == null) {<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      assert procStack.isRollingback();<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>      return;<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>    }<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span><a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>    // If this procedure is the last child awake the parent procedure<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>    if (parent.tryRunnable()) {<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>      // If we succeeded in making the parent runnable -- i.e. all of its<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      // children have completed, move parent to front of the queue.<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      store.update(parent);<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      scheduler.addFront(parent);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      LOG.info("Finished subprocedure(s) of " + parent + "; resume parent processing.");<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>      return;<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>    }<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>  }<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span><a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>  private void updateStoreOnExec(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>      if (LOG.isTraceEnabled()) {<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>      }<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      store.insert(procedure, subprocs);<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>    } else {<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      LOG.trace("Store update {}", procedure);<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>        // remove child procedures<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        if (childProcIds != null) {<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>          store.delete(procedure, childProcIds);<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>            procedures.remove(childProcIds[i]);<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>          }<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>        } else {<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>          store.update(procedure);<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      } else {<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        store.update(procedure);<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>      }<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>    }<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>  }<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span><a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>  private void handleInterruptedException(Procedure&lt;TEnvironment&gt; proc, InterruptedException e) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>    LOG.trace("Interrupt during {}. suspend and retry it later.", proc, e);<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>    // and the executor/store will be stopped.<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>  }<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span><a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>  private void execCompletionCleanup(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    final TEnvironment env = getEnvironment();<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>    if (proc.hasLock()) {<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>      LOG.warn("Usually this should not happen, we will release the lock before if the procedure" +<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>        " is finished, even if the holdLock is true, arrive here means we have some holes where" +<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        " we do not release the lock. And the releaseLock below may fail since the procedure may" +<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>        " have already been deleted from the procedure store.");<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>      releaseLock(proc, true);<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>    }<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>    try {<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>      proc.completionCleanup(env);<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>    } catch (Throwable e) {<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>    }<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>  }<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span><a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>  private void procedureFinished(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>    // call the procedure completion cleanup handler<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>    execCompletionCleanup(proc);<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span><a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>    CompletedProcedureRetainer&lt;TEnvironment&gt; retainer = new CompletedProcedureRetainer&lt;&gt;(proc);<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span><a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>    // update the executor internal state maps<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>      retainer.setClientAckTime(0);<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>    }<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span><a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>    completed.put(proc.getProcId(), retainer);<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>    rollbackStack.remove(proc.getProcId());<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    procedures.remove(proc.getProcId());<a name="line.1749"></a>
+<span class="sourceLineNo">1665</span>    // If this procedure is the last child awake the parent procedure<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>    if (parent.tryRunnable()) {<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>      // If we succeeded in making the parent runnable -- i.e. all of its<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      // children have completed, move parent to front of the queue.<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>      store.update(parent);<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>      scheduler.addFront(parent);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      LOG.info("Finished subprocedure(s) of " + parent + "; resume parent processing.");<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>      return;<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>    }<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>  }<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span><a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>  private void updateStoreOnExec(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      if (LOG.isTraceEnabled()) {<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>      }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      store.insert(procedure, subprocs);<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>    } else {<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      LOG.trace("Store update {}", procedure);<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>        // remove child procedures<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>        if (childProcIds != null) {<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>          store.delete(procedure, childProcIds);<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>            procedures.remove(childProcIds[i]);<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>          }<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>        } else {<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>          store.update(procedure);<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>        }<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>      } else {<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>        store.update(procedure);<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      }<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>    }<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>  }<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span><a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>  private void handleInterruptedException(Procedure&lt;TEnvironment&gt; proc, InterruptedException e) {<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>    LOG.trace("Interrupt during {}. suspend and retry it later.", proc, e);<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>    // and the executor/store will be stopped.<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>  }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span><a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  private void execCompletionCleanup(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>    final TEnvironment env = getEnvironment();<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>    if (proc.hasLock()) {<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      LOG.warn("Usually this should not happen, we will release the lock before if the procedure" +<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>        " is finished, even if the holdLock is true, arrive here means we have some holes where" +<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        " we do not release the lock. And the releaseLock below may fail since the procedure may" +<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        " have already been deleted from the procedure store.");<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      releaseLock(proc, true);<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>    }<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>    try {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>      proc.completionCleanup(env);<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>    } catch (Throwable e) {<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>    }<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>  }<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span><a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>  private void procedureFinished(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    // call the procedure completion cleanup handler<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>    execCompletionCleanup(proc);<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span><a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>    CompletedProcedureRetainer&lt;TEnvironment&gt; retainer = new CompletedProcedureRetainer&lt;&gt;(proc);<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span><a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>    // update the executor internal state maps<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>      retainer.setClientAckTime(0);<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>    }<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span><a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>    completed.put(proc.getProcId(), retainer);<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>    rollbackStack.remove(proc.getProcId());<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>    procedures.remove(proc.getProcId());<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span><a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>    // call the runnableSet completion cleanup handler<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>    try {<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>      scheduler.completionCleanup(proc);<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>    } catch (Throwable e) {<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: {}", proc, e);<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
 <span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    // call the runnableSet completion cleanup handler<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    try {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      scheduler.completionCleanup(proc);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>    } catch (Throwable e) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: {}", proc, e);<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>    }<a name="line.1757"></a>
+<span class="sourceLineNo">1751</span>    // Notify the listeners<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>  }<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span><a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>  RootProcedureState&lt;TEnvironment&gt; getProcStack(long rootProcId) {<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    return rollbackStack.get(rootProcId);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>  }<a name="line.1757"></a>
 <span class="sourceLineNo">1758</span><a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>    // Notify the listeners<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span><a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>  RootProcedureState&lt;TEnvironment&gt; getProcStack(long rootProcId) {<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>    return rollbackStack.get(rootProcId);<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  }<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>  // ==========================================================================<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>  //  Worker Thread<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>  // ==========================================================================<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>  private class WorkerThread extends StoppableThread {<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    private volatile Procedure&lt;TEnvironment&gt; activeProcedure;<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    public WorkerThread(ThreadGroup group) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      this(group, "PEWorker-");<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    }<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span><a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    protected WorkerThread(ThreadGroup group, String prefix) {<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>      super(group, prefix + workerId.incrementAndGet());<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>      setDaemon(true);<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span><a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>    @Override<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    public void sendStopSignal() {<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      scheduler.signalAll();<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    }<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span><a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>    @Override<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>    public void run() {<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      try {<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>        while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>          Procedure&lt;TEnvironment&gt; proc = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>          if (proc == null) {<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>            continue;<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>          }<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>          this.activeProcedure = proc;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>          int activeCount = activeExecutorCount.incrementAndGet();<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>          int runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>          LOG.trace("Execute pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>            runningCount, activeCount);<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>          executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>          IdLock.Entry lockEntry = procExecutionLock.getLockEntry(proc.getProcId());<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>          try {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>            executeProcedure(proc);<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>          } catch (AssertionError e) {<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            LOG.info("ASSERT pid=" + proc.getProcId(), e);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            throw e;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          } finally {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>            procExecutionLock.releaseLockEntry(lockEntry);<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>            activeCount = activeExecutorCount.decrementAndGet();<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>            runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>            LOG.trace("Halt pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>              runningCount, activeCount);<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>            this.activeProcedure = null;<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>            lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>            executionStartTime.set(Long.MAX_VALUE);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>          }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>        }<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>      } catch (Throwable t) {<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        LOG.warn("Worker terminating UNNATURALLY {}", this.activeProcedure, t);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>      } finally {<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        LOG.trace("Worker terminated.");<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>      }<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>      workerThreads.remove(this);<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    }<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    @Override<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    public String toString() {<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      Procedure&lt;?&gt; p = this.activeProcedure;<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>      return getName() + "(pid=" + (p == null? Procedure.NO_PROC_ID: p.getProcId() + ")");<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>    }<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span><a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    /**<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>     * @return the time since the current procedure is running<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>     */<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    public long getCurrentRunTime() {<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>    }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span><a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    // core worker never timeout<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.1842"></a>
-<span class="sourceLineNo">1843

<TRUNCATED>

[24/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index c83ec0f..5137342 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -26,7 +26,7 @@ under the License.
     <copyright>&#169;2007 - 2018 The Apache Software Foundation</copyright>
     <item>
       <title>File: 3703,
-             Errors: 15560,
+             Errors: 15559,
              Warnings: 0,
              Infos: 0
       </title>
@@ -43959,7 +43959,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  11
+                  10
                 </td>
               </tr>
                           <tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index 552ccb0..fe3d1aa 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Code of Conduct Policy
@@ -375,7 +375,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-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index c6273e0..17a5535 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -440,7 +440,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index f7f7037..5a53bf4 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -905,7 +905,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index fd33402..5e72f8d 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -313,7 +313,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index ab833dd..ff07f6f 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -1005,7 +1005,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index d2c400c..74906b0 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -2971,6 +2971,20 @@
 <td class="colLast"><code>"NORMALIZATION_ENABLED"</code></td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.HTableDescriptor.NORMALIZER_TARGET_REGION_COUNT">
+<!--   -->
+</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/HTableDescriptor.html#NORMALIZER_TARGET_REGION_COUNT">NORMALIZER_TARGET_REGION_COUNT</a></code></td>
+<td class="colLast"><code>"NORMALIZER_TARGET_REGION_COUNT"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.HTableDescriptor.NORMALIZER_TARGET_REGION_SIZE">
+<!--   -->
+</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/HTableDescriptor.html#NORMALIZER_TARGET_REGION_SIZE">NORMALIZER_TARGET_REGION_SIZE</a></code></td>
+<td class="colLast"><code>"NORMALIZER_TARGET_REGION_SIZE"</code></td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HTableDescriptor.OWNER">
 <!--   -->
 </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>
@@ -3803,21 +3817,21 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Sun Aug 12 14:39:50 UTC 2018"</code></td>
+<td class="colLast"><code>"Mon Aug 13 14:39:43 UTC 2018"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
 <!--   -->
 </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#revision">revision</a></code></td>
-<td class="colLast"><code>"953e5aa88c992cec213bc57c2db12b78908f357f"</code></td>
+<td class="colLast"><code>"a07e755625382d3904c935c21a4f240ede6d2f43"</code></td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.srcChecksum">
 <!--   -->
 </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>"918a46246a4ce94897ca837c64052ab9"</code></td>
+<td class="colLast"><code>"4c556648c6ac0af4fb21141c90f6e2f3"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">
@@ -6436,6 +6450,20 @@
 <td class="colLast"><code>"NORMALIZATION_ENABLED"</code></td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.client.TableDescriptorBuilder.NORMALIZER_TARGET_REGION_COUNT">
+<!--   -->
+</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/client/TableDescriptorBuilder.html#NORMALIZER_TARGET_REGION_COUNT">NORMALIZER_TARGET_REGION_COUNT</a></code></td>
+<td class="colLast"><code>"NORMALIZER_TARGET_REGION_COUNT"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.client.TableDescriptorBuilder.NORMALIZER_TARGET_REGION_SIZE">
+<!--   -->
+</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/client/TableDescriptorBuilder.html#NORMALIZER_TARGET_REGION_SIZE">NORMALIZER_TARGET_REGION_SIZE</a></code></td>
+<td class="colLast"><code>"NORMALIZER_TARGET_REGION_SIZE"</code></td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.client.TableDescriptorBuilder.OWNER">
 <!--   -->
 </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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index d94531a..16e8bbc 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -44058,6 +44058,30 @@
 <dd>
 <div class="block">Returns the singleton latch which does nothing.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TableDescriptor.html#getNormalizerTargetRegionCount--">getNormalizerTargetRegionCount()</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a></dt>
+<dd>
+<div class="block">Check if there is the target region count.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#getNormalizerTargetRegionCount--">getNormalizerTargetRegionCount()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></dt>
+<dd>
+<div class="block">Check if there is the target region count.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#getNormalizerTargetRegionCount--">getNormalizerTargetRegionCount()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></dt>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TableDescriptor.html#getNormalizerTargetRegionSize--">getNormalizerTargetRegionSize()</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a></dt>
+<dd>
+<div class="block">Check if there is the target region size.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#getNormalizerTargetRegionSize--">getNormalizerTargetRegionSize()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></dt>
+<dd>
+<div class="block">Check if there is the target region size.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#getNormalizerTargetRegionSize--">getNormalizerTargetRegionSize()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></dt>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshot.html#getNoSuchSnapshot--">getNoSuchSnapshot()</a></span> - Static method in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshot.html" title="class in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshot</a></dt>
 <dd>
 <div class="block">Returns a singleton that corresponds to no snapshot information.</div>
@@ -78091,6 +78115,22 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/HMaster.html#normalizer">normalizer</a></span> - Variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#NORMALIZER_TARGET_REGION_COUNT">NORMALIZER_TARGET_REGION_COUNT</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#NORMALIZER_TARGET_REGION_COUNT">NORMALIZER_TARGET_REGION_COUNT</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></dt>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#NORMALIZER_TARGET_REGION_COUNT_KEY">NORMALIZER_TARGET_REGION_COUNT_KEY</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#NORMALIZER_TARGET_REGION_SIZE">NORMALIZER_TARGET_REGION_SIZE</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#NORMALIZER_TARGET_REGION_SIZE">NORMALIZER_TARGET_REGION_SIZE</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></dt>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#NORMALIZER_TARGET_REGION_SIZE_KEY">NORMALIZER_TARGET_REGION_SIZE_KEY</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/HMaster.html#normalizerChore">normalizerChore</a></span> - Variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/HMaster.html#normalizeRegions--">normalizeRegions()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a></dt>
@@ -102810,6 +102850,26 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MasterRpcServices.html#setNormalizerRunning-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningRequest-">setNormalizerRunning(RpcController, MasterProtos.SetNormalizerRunningRequest)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MasterRpcServices.html" title="class in org.apache.hadoop.hbase.master">MasterRpcServices</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setNormalizerTargetRegionCount-int-">setNormalizerTargetRegionCount(int)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></dt>
+<dd>
+<div class="block">Setting the target region count of table normalization .</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setNormalizerTargetRegionCount-int-">setNormalizerTargetRegionCount(int)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#setNormalizerTargetRegionCount-int-">setNormalizerTargetRegionCount(int)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></dt>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setNormalizerTargetRegionSize-long-">setNormalizerTargetRegionSize(long)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></dt>
+<dd>
+<div class="block">Setting the target region size of table normalization.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setNormalizerTargetRegionSize-long-">setNormalizerTargetRegionSize(long)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#setNormalizerTargetRegionSize-long-">setNormalizerTargetRegionSize(long)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></dt>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/StripeMultiFileWriter.html#setNoStripeMetadata--">setNoStripeMetadata()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StripeMultiFileWriter.html" title="class in org.apache.hadoop.hbase.regionserver">StripeMultiFileWriter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/MultithreadedTableMapper.html#setNumberOfThreads-org.apache.hadoop.mapreduce.Job-int-">setNumberOfThreads(Job, int)</a></span> - Static method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/MultithreadedTableMapper.html" title="class in org.apache.hadoop.hbase.mapreduce">MultithreadedTableMapper</a></dt>


[27/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/apidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html b/apidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
index fc17f3d..16c2238 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
@@ -158,1296 +158,1356 @@
 <span class="sourceLineNo">150</span>  private static final Bytes NORMALIZATION_ENABLED_KEY<a name="line.150"></a>
 <span class="sourceLineNo">151</span>          = new Bytes(Bytes.toBytes(NORMALIZATION_ENABLED));<a name="line.151"></a>
 <span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  /**<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   * Default durability for HTD is USE_DEFAULT, which defaults to HBase-global<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   * default value<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  private static final Durability DEFAULT_DURABLITY = Durability.USE_DEFAULT;<a name="line.157"></a>
+<span class="sourceLineNo">153</span>  @InterfaceAudience.Private<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  public static final String NORMALIZER_TARGET_REGION_COUNT =<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      "NORMALIZER_TARGET_REGION_COUNT";<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  private static final Bytes NORMALIZER_TARGET_REGION_COUNT_KEY =<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      new Bytes(Bytes.toBytes(NORMALIZER_TARGET_REGION_COUNT));<a name="line.157"></a>
 <span class="sourceLineNo">158</span><a name="line.158"></a>
 <span class="sourceLineNo">159</span>  @InterfaceAudience.Private<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  public static final String PRIORITY = "PRIORITY";<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  private static final Bytes PRIORITY_KEY<a name="line.161"></a>
-<span class="sourceLineNo">162</span>          = new Bytes(Bytes.toBytes(PRIORITY));<a name="line.162"></a>
+<span class="sourceLineNo">160</span>  public static final String NORMALIZER_TARGET_REGION_SIZE = "NORMALIZER_TARGET_REGION_SIZE";<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  private static final Bytes NORMALIZER_TARGET_REGION_SIZE_KEY =<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      new Bytes(Bytes.toBytes(NORMALIZER_TARGET_REGION_SIZE));<a name="line.162"></a>
 <span class="sourceLineNo">163</span><a name="line.163"></a>
 <span class="sourceLineNo">164</span>  /**<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * Relative priority of the table used for rpc scheduling<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   */<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  private static final int DEFAULT_PRIORITY = HConstants.NORMAL_QOS;<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>  /**<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * Constant that denotes whether the table is READONLY by default and is false<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   */<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  public static final boolean DEFAULT_READONLY = false;<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>  /**<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * Constant that denotes whether the table is compaction enabled by default<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  public static final boolean DEFAULT_COMPACTION_ENABLED = true;<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  /**<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * Constant that denotes whether the table is normalized by default.<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   */<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  public static final boolean DEFAULT_NORMALIZATION_ENABLED = false;<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  /**<a name="line.184"></a>
-<span class="sourceLineNo">185</span>   * Constant that denotes the maximum default size of the memstore in bytes after which<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   * the contents are flushed to the store files.<a name="line.186"></a>
+<span class="sourceLineNo">165</span>   * Default durability for HTD is USE_DEFAULT, which defaults to HBase-global<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * default value<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  private static final Durability DEFAULT_DURABLITY = Durability.USE_DEFAULT;<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  @InterfaceAudience.Private<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  public static final String PRIORITY = "PRIORITY";<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  private static final Bytes PRIORITY_KEY<a name="line.172"></a>
+<span class="sourceLineNo">173</span>          = new Bytes(Bytes.toBytes(PRIORITY));<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>  /**<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   * Relative priority of the table used for rpc scheduling<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   */<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  private static final int DEFAULT_PRIORITY = HConstants.NORMAL_QOS;<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span>  /**<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * Constant that denotes whether the table is READONLY by default and is false<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   */<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  public static final boolean DEFAULT_READONLY = false;<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  /**<a name="line.185"></a>
+<span class="sourceLineNo">186</span>   * Constant that denotes whether the table is compaction enabled by default<a name="line.186"></a>
 <span class="sourceLineNo">187</span>   */<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  public static final long DEFAULT_MEMSTORE_FLUSH_SIZE = 1024 * 1024 * 128L;<a name="line.188"></a>
+<span class="sourceLineNo">188</span>  public static final boolean DEFAULT_COMPACTION_ENABLED = true;<a name="line.188"></a>
 <span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  public static final int DEFAULT_REGION_REPLICATION = 1;<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span>  public static final boolean DEFAULT_REGION_MEMSTORE_REPLICATION = true;<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>  private final static Map&lt;String, String&gt; DEFAULT_VALUES = new HashMap&lt;&gt;();<a name="line.194"></a>
-<span class="sourceLineNo">195</span>  private final static Set&lt;Bytes&gt; RESERVED_KEYWORDS = new HashSet&lt;&gt;();<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>  static {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    DEFAULT_VALUES.put(MAX_FILESIZE,<a name="line.198"></a>
-<span class="sourceLineNo">199</span>            String.valueOf(HConstants.DEFAULT_MAX_FILE_SIZE));<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    DEFAULT_VALUES.put(READONLY, String.valueOf(DEFAULT_READONLY));<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    DEFAULT_VALUES.put(MEMSTORE_FLUSHSIZE,<a name="line.201"></a>
-<span class="sourceLineNo">202</span>            String.valueOf(DEFAULT_MEMSTORE_FLUSH_SIZE));<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    DEFAULT_VALUES.put(DURABILITY, DEFAULT_DURABLITY.name()); //use the enum name<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    DEFAULT_VALUES.put(REGION_REPLICATION, String.valueOf(DEFAULT_REGION_REPLICATION));<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    DEFAULT_VALUES.put(NORMALIZATION_ENABLED, String.valueOf(DEFAULT_NORMALIZATION_ENABLED));<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    DEFAULT_VALUES.put(PRIORITY, String.valueOf(DEFAULT_PRIORITY));<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    DEFAULT_VALUES.keySet().stream()<a name="line.207"></a>
-<span class="sourceLineNo">208</span>            .map(s -&gt; new Bytes(Bytes.toBytes(s))).forEach(RESERVED_KEYWORDS::add);<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    RESERVED_KEYWORDS.add(IS_META_KEY);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  }<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>  @InterfaceAudience.Private<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  public final static String NAMESPACE_FAMILY_INFO = "info";<a name="line.213"></a>
-<span class="sourceLineNo">214</span>  @InterfaceAudience.Private<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  public final static byte[] NAMESPACE_FAMILY_INFO_BYTES = Bytes.toBytes(NAMESPACE_FAMILY_INFO);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  @InterfaceAudience.Private<a name="line.216"></a>
-<span class="sourceLineNo">217</span>  public final static byte[] NAMESPACE_COL_DESC_BYTES = Bytes.toBytes("d");<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span>  /**<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * &lt;pre&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * Pattern that matches a coprocessor specification. Form is:<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * {@code &lt;coprocessor jar file location&gt; '|' &lt;class name&gt; ['|' &lt;priority&gt; ['|' &lt;arguments&gt;]]}<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * where arguments are {@code &lt;KEY&gt; '=' &lt;VALUE&gt; [,...]}<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * For example: {@code hdfs:///foo.jar|com.foo.FooRegionObserver|1001|arg1=1,arg2=2}<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * &lt;/pre&gt;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   */<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  private static final Pattern CP_HTD_ATTR_VALUE_PATTERN =<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    Pattern.compile("(^[^\\|]*)\\|([^\\|]+)\\|[\\s]*([\\d]*)[\\s]*(\\|.*)?$");<a name="line.228"></a>
+<span class="sourceLineNo">190</span>  /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * Constant that denotes whether the table is normalized by default.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  public static final boolean DEFAULT_NORMALIZATION_ENABLED = false;<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>  /**<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   * Constant that denotes the maximum default size of the memstore in bytes after which<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * the contents are flushed to the store files.<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   */<a name="line.198"></a>
+<span class="sourceLineNo">199</span>  public static final long DEFAULT_MEMSTORE_FLUSH_SIZE = 1024 * 1024 * 128L;<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  public static final int DEFAULT_REGION_REPLICATION = 1;<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>  public static final boolean DEFAULT_REGION_MEMSTORE_REPLICATION = true;<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>  private final static Map&lt;String, String&gt; DEFAULT_VALUES = new HashMap&lt;&gt;();<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  private final static Set&lt;Bytes&gt; RESERVED_KEYWORDS = new HashSet&lt;&gt;();<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>  static {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    DEFAULT_VALUES.put(MAX_FILESIZE,<a name="line.209"></a>
+<span class="sourceLineNo">210</span>            String.valueOf(HConstants.DEFAULT_MAX_FILE_SIZE));<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    DEFAULT_VALUES.put(READONLY, String.valueOf(DEFAULT_READONLY));<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    DEFAULT_VALUES.put(MEMSTORE_FLUSHSIZE,<a name="line.212"></a>
+<span class="sourceLineNo">213</span>            String.valueOf(DEFAULT_MEMSTORE_FLUSH_SIZE));<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    DEFAULT_VALUES.put(DURABILITY, DEFAULT_DURABLITY.name()); //use the enum name<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    DEFAULT_VALUES.put(REGION_REPLICATION, String.valueOf(DEFAULT_REGION_REPLICATION));<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    DEFAULT_VALUES.put(NORMALIZATION_ENABLED, String.valueOf(DEFAULT_NORMALIZATION_ENABLED));<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    DEFAULT_VALUES.put(PRIORITY, String.valueOf(DEFAULT_PRIORITY));<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    DEFAULT_VALUES.keySet().stream()<a name="line.218"></a>
+<span class="sourceLineNo">219</span>            .map(s -&gt; new Bytes(Bytes.toBytes(s))).forEach(RESERVED_KEYWORDS::add);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    RESERVED_KEYWORDS.add(IS_META_KEY);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span>  @InterfaceAudience.Private<a name="line.223"></a>
+<span class="sourceLineNo">224</span>  public final static String NAMESPACE_FAMILY_INFO = "info";<a name="line.224"></a>
+<span class="sourceLineNo">225</span>  @InterfaceAudience.Private<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  public final static byte[] NAMESPACE_FAMILY_INFO_BYTES = Bytes.toBytes(NAMESPACE_FAMILY_INFO);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  @InterfaceAudience.Private<a name="line.227"></a>
+<span class="sourceLineNo">228</span>  public final static byte[] NAMESPACE_COL_DESC_BYTES = Bytes.toBytes("d");<a name="line.228"></a>
 <span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>  private static final String CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN = "[^=,]+";<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  private static final String CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN = "[^,]+";<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  private static final Pattern CP_HTD_ATTR_VALUE_PARAM_PATTERN = Pattern.compile(<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    "(" + CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN + ")=(" +<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN + "),?");<a name="line.234"></a>
-<span class="sourceLineNo">235</span>  private static final Pattern CP_HTD_ATTR_KEY_PATTERN =<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    Pattern.compile("^coprocessor\\$([0-9]+)$", Pattern.CASE_INSENSITIVE);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  /**<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * Table descriptor for namespace table<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   */<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  // TODO We used to set CacheDataInL1 for NS table. When we have BucketCache in file mode, now the<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  // NS data goes to File mode BC only. Test how that affect the system. If too much, we have to<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  // rethink about adding back the setCacheDataInL1 for NS table.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public static final TableDescriptor NAMESPACE_TABLEDESC<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    = TableDescriptorBuilder.newBuilder(TableName.NAMESPACE_TABLE_NAME)<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      .setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(NAMESPACE_FAMILY_INFO_BYTES)<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        // Ten is arbitrary number.  Keep versions to help debugging.<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        .setMaxVersions(10)<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        .setInMemory(true)<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        .setBlocksize(8 * 1024)<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        .setScope(HConstants.REPLICATION_SCOPE_LOCAL)<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        .build())<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      .build();<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  private final ModifyableTableDescriptor desc;<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>  /**<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   * @param desc The table descriptor to serialize<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * @return This instance serialized with pb with pb magic prefix<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  public static byte[] toByteArray(TableDescriptor desc) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (desc instanceof ModifyableTableDescriptor) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      return ((ModifyableTableDescriptor) desc).toByteArray();<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    return new ModifyableTableDescriptor(desc).toByteArray();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
+<span class="sourceLineNo">230</span>  /**<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * &lt;pre&gt;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * Pattern that matches a coprocessor specification. Form is:<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * {@code &lt;coprocessor jar file location&gt; '|' &lt;class name&gt; ['|' &lt;priority&gt; ['|' &lt;arguments&gt;]]}<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   * where arguments are {@code &lt;KEY&gt; '=' &lt;VALUE&gt; [,...]}<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   * For example: {@code hdfs:///foo.jar|com.foo.FooRegionObserver|1001|arg1=1,arg2=2}<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * &lt;/pre&gt;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   */<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  private static final Pattern CP_HTD_ATTR_VALUE_PATTERN =<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    Pattern.compile("(^[^\\|]*)\\|([^\\|]+)\\|[\\s]*([\\d]*)[\\s]*(\\|.*)?$");<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>  private static final String CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN = "[^=,]+";<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  private static final String CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN = "[^,]+";<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  private static final Pattern CP_HTD_ATTR_VALUE_PARAM_PATTERN = Pattern.compile(<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    "(" + CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN + ")=(" +<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN + "),?");<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  private static final Pattern CP_HTD_ATTR_KEY_PATTERN =<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    Pattern.compile("^coprocessor\\$([0-9]+)$", Pattern.CASE_INSENSITIVE);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  /**<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * Table descriptor for namespace table<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   */<a name="line.250"></a>
+<span class="sourceLineNo">251</span>  // TODO We used to set CacheDataInL1 for NS table. When we have BucketCache in file mode, now the<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  // NS data goes to File mode BC only. Test how that affect the system. If too much, we have to<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  // rethink about adding back the setCacheDataInL1 for NS table.<a name="line.253"></a>
+<span class="sourceLineNo">254</span>  public static final TableDescriptor NAMESPACE_TABLEDESC<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    = TableDescriptorBuilder.newBuilder(TableName.NAMESPACE_TABLE_NAME)<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      .setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(NAMESPACE_FAMILY_INFO_BYTES)<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        // Ten is arbitrary number.  Keep versions to help debugging.<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        .setMaxVersions(10)<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        .setInMemory(true)<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        .setBlocksize(8 * 1024)<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        .setScope(HConstants.REPLICATION_SCOPE_LOCAL)<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        .build())<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      .build();<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  private final ModifyableTableDescriptor desc;<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>   * The input should be created by {@link #toByteArray}.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * @param pbBytes A pb serialized TableDescriptor instance with pb magic prefix<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   * @return This instance serialized with pb with pb magic prefix<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * @throws org.apache.hadoop.hbase.exceptions.DeserializationException<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   */<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  public static TableDescriptor parseFrom(byte[] pbBytes) throws DeserializationException {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    return ModifyableTableDescriptor.parseFrom(pbBytes);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public static TableDescriptorBuilder newBuilder(final TableName name) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    return new TableDescriptorBuilder(name);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  public static TableDescriptor copy(TableDescriptor desc) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    return new ModifyableTableDescriptor(desc);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>  public static TableDescriptor copy(TableName name, TableDescriptor desc) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    return new ModifyableTableDescriptor(name, desc);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span>  /**<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * Copy all values, families, and name from the input.<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * @param desc The desciptor to copy<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   * @return A clone of input<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   */<a name="line.292"></a>
-<span class="sourceLineNo">293</span>  public static TableDescriptorBuilder newBuilder(final TableDescriptor desc) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    return new TableDescriptorBuilder(desc);<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>  private TableDescriptorBuilder(final TableName name) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    this.desc = new ModifyableTableDescriptor(name);<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>  private TableDescriptorBuilder(final TableDescriptor desc) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    this.desc = new ModifyableTableDescriptor(desc);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>  public TableDescriptorBuilder setCoprocessor(String className) throws IOException {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    return setCoprocessor(CoprocessorDescriptorBuilder.of(className));<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>  public TableDescriptorBuilder setCoprocessor(CoprocessorDescriptor cpDesc) throws IOException {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    desc.setCoprocessor(Objects.requireNonNull(cpDesc));<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    return this;<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>  public TableDescriptorBuilder setCoprocessors(Collection&lt;CoprocessorDescriptor&gt; cpDescs)<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    throws IOException {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    for (CoprocessorDescriptor cpDesc : cpDescs) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      desc.setCoprocessor(cpDesc);<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    return this;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  public TableDescriptorBuilder setColumnFamily(final ColumnFamilyDescriptor family) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    desc.setColumnFamily(Objects.requireNonNull(family));<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    return this;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  }<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span>  public TableDescriptorBuilder setColumnFamilies(<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    final Collection&lt;ColumnFamilyDescriptor&gt; families) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    families.forEach(desc::setColumnFamily);<a name="line.329"></a>
+<span class="sourceLineNo">267</span>   * @param desc The table descriptor to serialize<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   * @return This instance serialized with pb with pb magic prefix<a name="line.268"></a>
+<span class="sourceLineNo">269</span>   */<a name="line.269"></a>
+<span class="sourceLineNo">270</span>  public static byte[] toByteArray(TableDescriptor desc) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    if (desc instanceof ModifyableTableDescriptor) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      return ((ModifyableTableDescriptor) desc).toByteArray();<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    return new ModifyableTableDescriptor(desc).toByteArray();<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  }<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>  /**<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   * The input should be created by {@link #toByteArray}.<a name="line.278"></a>
+<span class="sourceLineNo">279</span>   * @param pbBytes A pb serialized TableDescriptor instance with pb magic prefix<a name="line.279"></a>
+<span class="sourceLineNo">280</span>   * @return This instance serialized with pb with pb magic prefix<a name="line.280"></a>
+<span class="sourceLineNo">281</span>   * @throws org.apache.hadoop.hbase.exceptions.DeserializationException<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   */<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public static TableDescriptor parseFrom(byte[] pbBytes) throws DeserializationException {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    return ModifyableTableDescriptor.parseFrom(pbBytes);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  }<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span>  public static TableDescriptorBuilder newBuilder(final TableName name) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    return new TableDescriptorBuilder(name);<a name="line.288"></a>
+<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span>  public static TableDescriptor copy(TableDescriptor desc) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    return new ModifyableTableDescriptor(desc);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>  public static TableDescriptor copy(TableName name, TableDescriptor desc) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    return new ModifyableTableDescriptor(name, desc);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  /**<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * Copy all values, families, and name from the input.<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   * @param desc The desciptor to copy<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * @return A clone of input<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   */<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public static TableDescriptorBuilder newBuilder(final TableDescriptor desc) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    return new TableDescriptorBuilder(desc);<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>  private TableDescriptorBuilder(final TableName name) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    this.desc = new ModifyableTableDescriptor(name);<a name="line.309"></a>
+<span class="sourceLineNo">310</span>  }<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span>  private TableDescriptorBuilder(final TableDescriptor desc) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    this.desc = new ModifyableTableDescriptor(desc);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  }<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span>  public TableDescriptorBuilder setCoprocessor(String className) throws IOException {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    return setCoprocessor(CoprocessorDescriptorBuilder.of(className));<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  public TableDescriptorBuilder setCoprocessor(CoprocessorDescriptor cpDesc) throws IOException {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    desc.setCoprocessor(Objects.requireNonNull(cpDesc));<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    return this;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>  public TableDescriptorBuilder setCoprocessors(Collection&lt;CoprocessorDescriptor&gt; cpDescs)<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    throws IOException {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    for (CoprocessorDescriptor cpDesc : cpDescs) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      desc.setCoprocessor(cpDesc);<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    }<a name="line.329"></a>
 <span class="sourceLineNo">330</span>    return this;<a name="line.330"></a>
 <span class="sourceLineNo">331</span>  }<a name="line.331"></a>
 <span class="sourceLineNo">332</span><a name="line.332"></a>
-<span class="sourceLineNo">333</span>  public TableDescriptorBuilder modifyColumnFamily(final ColumnFamilyDescriptor family) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    desc.modifyColumnFamily(Objects.requireNonNull(family));<a name="line.334"></a>
+<span class="sourceLineNo">333</span>  public TableDescriptorBuilder setColumnFamily(final ColumnFamilyDescriptor family) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    desc.setColumnFamily(Objects.requireNonNull(family));<a name="line.334"></a>
 <span class="sourceLineNo">335</span>    return this;<a name="line.335"></a>
 <span class="sourceLineNo">336</span>  }<a name="line.336"></a>
 <span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>  public TableDescriptorBuilder removeValue(Bytes key) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    desc.removeValue(key);<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    return this;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>  }<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>  public TableDescriptorBuilder removeValue(byte[] key) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    desc.removeValue(key);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    return this;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>  }<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>  public TableDescriptorBuilder removeColumnFamily(final byte[] name) {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    desc.removeColumnFamily(name);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    return this;<a name="line.350"></a>
-<span class="sourceLineNo">351</span>  }<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span>  public TableDescriptorBuilder removeCoprocessor(String className) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    desc.removeCoprocessor(className);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    return this;<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>  public TableDescriptorBuilder setCompactionEnabled(final boolean isEnable) {<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    desc.setCompactionEnabled(isEnable);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return this;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  public TableDescriptorBuilder setDurability(Durability durability) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    desc.setDurability(durability);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    return this;<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>  public TableDescriptorBuilder setFlushPolicyClassName(String clazz) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    desc.setFlushPolicyClassName(clazz);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return this;<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  }<a name="line.371"></a>
-<span class="sourceLineNo">372</span><a name="line.372"></a>
-<span class="sourceLineNo">373</span>  public TableDescriptorBuilder setMaxFileSize(long maxFileSize) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    desc.setMaxFileSize(maxFileSize);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    return this;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  public TableDescriptorBuilder setMemStoreFlushSize(long memstoreFlushSize) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    desc.setMemStoreFlushSize(memstoreFlushSize);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    return this;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  public TableDescriptorBuilder setNormalizationEnabled(final boolean isEnable) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    desc.setNormalizationEnabled(isEnable);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    return this;<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>  @Deprecated<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  public TableDescriptorBuilder setOwner(User owner) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    desc.setOwner(owner);<a name="line.390"></a>
+<span class="sourceLineNo">338</span>  public TableDescriptorBuilder setColumnFamilies(<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    final Collection&lt;ColumnFamilyDescriptor&gt; families) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    families.forEach(desc::setColumnFamily);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    return this;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>  }<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>  public TableDescriptorBuilder modifyColumnFamily(final ColumnFamilyDescriptor family) {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    desc.modifyColumnFamily(Objects.requireNonNull(family));<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    return this;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span>  public TableDescriptorBuilder removeValue(Bytes key) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    desc.removeValue(key);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    return this;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  public TableDescriptorBuilder removeValue(byte[] key) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    desc.removeValue(key);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    return this;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>  public TableDescriptorBuilder removeColumnFamily(final byte[] name) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    desc.removeColumnFamily(name);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    return this;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>  }<a name="line.362"></a>
+<span class="sourceLineNo">363</span><a name="line.363"></a>
+<span class="sourceLineNo">364</span>  public TableDescriptorBuilder removeCoprocessor(String className) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    desc.removeCoprocessor(className);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    return this;<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>  public TableDescriptorBuilder setCompactionEnabled(final boolean isEnable) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    desc.setCompactionEnabled(isEnable);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    return this;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>  }<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span>  public TableDescriptorBuilder setDurability(Durability durability) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    desc.setDurability(durability);<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    return this;<a name="line.376"></a>
+<span class="sourceLineNo">377</span>  }<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span>  public TableDescriptorBuilder setFlushPolicyClassName(String clazz) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    desc.setFlushPolicyClassName(clazz);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    return this;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
+<span class="sourceLineNo">383</span><a name="line.383"></a>
+<span class="sourceLineNo">384</span>  public TableDescriptorBuilder setMaxFileSize(long maxFileSize) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    desc.setMaxFileSize(maxFileSize);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    return this;<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>  public TableDescriptorBuilder setMemStoreFlushSize(long memstoreFlushSize) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    desc.setMemStoreFlushSize(memstoreFlushSize);<a name="line.390"></a>
 <span class="sourceLineNo">391</span>    return this;<a name="line.391"></a>
 <span class="sourceLineNo">392</span>  }<a name="line.392"></a>
 <span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>  @Deprecated<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  public TableDescriptorBuilder setOwnerString(String ownerString) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    desc.setOwnerString(ownerString);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    return this;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  }<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span>  public TableDescriptorBuilder setPriority(int priority) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    desc.setPriority(priority);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    return this;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
-<span class="sourceLineNo">404</span><a name="line.404"></a>
-<span class="sourceLineNo">405</span>  public TableDescriptorBuilder setReadOnly(final boolean readOnly) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    desc.setReadOnly(readOnly);<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    return this;<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>  public TableDescriptorBuilder setRegionMemStoreReplication(boolean memstoreReplication) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    desc.setRegionMemStoreReplication(memstoreReplication);<a name="line.411"></a>
+<span class="sourceLineNo">394</span>  public TableDescriptorBuilder setNormalizerTargetRegionCount(final int regionCount) {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    desc.setNormalizerTargetRegionCount(regionCount);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    return this;<a name="line.396"></a>
+<span class="sourceLineNo">397</span>  }<a name="line.397"></a>
+<span class="sourceLineNo">398</span><a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public TableDescriptorBuilder setNormalizerTargetRegionSize(final long regionSize) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    desc.setNormalizerTargetRegionSize(regionSize);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    return this;<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  public TableDescriptorBuilder setNormalizationEnabled(final boolean isEnable) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    desc.setNormalizationEnabled(isEnable);<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    return this;<a name="line.406"></a>
+<span class="sourceLineNo">407</span>  }<a name="line.407"></a>
+<span class="sourceLineNo">408</span><a name="line.408"></a>
+<span class="sourceLineNo">409</span>  @Deprecated<a name="line.409"></a>
+<span class="sourceLineNo">410</span>  public TableDescriptorBuilder setOwner(User owner) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    desc.setOwner(owner);<a name="line.411"></a>
 <span class="sourceLineNo">412</span>    return this;<a name="line.412"></a>
 <span class="sourceLineNo">413</span>  }<a name="line.413"></a>
 <span class="sourceLineNo">414</span><a name="line.414"></a>
-<span class="sourceLineNo">415</span>  public TableDescriptorBuilder setRegionReplication(int regionReplication) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    desc.setRegionReplication(regionReplication);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    return this;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  }<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span>  public TableDescriptorBuilder setRegionSplitPolicyClassName(String clazz) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    desc.setRegionSplitPolicyClassName(clazz);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    return this;<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>  public TableDescriptorBuilder setValue(final String key, final String value) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    desc.setValue(key, value);<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    return this;<a name="line.427"></a>
-<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span>  public TableDescriptorBuilder setValue(final Bytes key, final Bytes value) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    desc.setValue(key, value);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    return this;<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>  public TableDescriptorBuilder setValue(final byte[] key, final byte[] value) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    desc.setValue(key, value);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    return this;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  /**<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   * Sets replication scope all &amp; only the columns already in the builder. Columns added later won't<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * be backfilled with replication scope.<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   * @param scope replication scope<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * @return a TableDescriptorBuilder<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   */<a name="line.445"></a>
-<span class="sourceLineNo">446</span>  public TableDescriptorBuilder setReplicationScope(int scope) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    Map&lt;byte[], ColumnFamilyDescriptor&gt; newFamilies = new TreeMap&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    newFamilies.putAll(desc.families);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    newFamilies<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        .forEach((cf, cfDesc) -&gt; {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>          desc.removeColumnFamily(cf);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          desc.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(cfDesc).setScope(scope)<a name="line.452"></a>
-<span class="sourceLineNo">453</span>              .build());<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        });<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    return this;<a name="line.455"></a>
-<span class="sourceLineNo">456</span>  }<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span>  public TableDescriptor build() {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    return new ModifyableTableDescriptor(desc);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>  }<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span>  /**<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * TODO: make this private after removing the HTableDescriptor<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   */<a name="line.464"></a>
-<span class="sourceLineNo">465</span>  @InterfaceAudience.Private<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  public static class ModifyableTableDescriptor<a name="line.466"></a>
-<span class="sourceLineNo">467</span>          implements TableDescriptor, Comparable&lt;ModifyableTableDescriptor&gt; {<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>    private final TableName name;<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 map which holds the metadata information of the table. This metadata<a name="line.472"></a>
-<span class="sourceLineNo">473</span>     * includes values like IS_META, SPLIT_POLICY, MAX_FILE_SIZE,<a name="line.473"></a>
-<span class="sourceLineNo">474</span>     * READONLY, MEMSTORE_FLUSHSIZE etc...<a name="line.474"></a>
-<span class="sourceLineNo">475</span>     */<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    private final Map&lt;Bytes, Bytes&gt; values = new HashMap&lt;&gt;();<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>     * Maps column family name to the respective FamilyDescriptors<a name="line.479"></a>
-<span class="sourceLineNo">480</span>     */<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    private final Map&lt;byte[], ColumnFamilyDescriptor&gt; families<a name="line.481"></a>
-<span class="sourceLineNo">482</span>            = new TreeMap&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>    /**<a name="line.484"></a>
-<span class="sourceLineNo">485</span>     * Construct a table descriptor specifying a TableName object<a name="line.485"></a>
-<span class="sourceLineNo">486</span>     *<a name="line.486"></a>
-<span class="sourceLineNo">487</span>     * @param name Table name.<a name="line.487"></a>
-<span class="sourceLineNo">488</span>     * TODO: make this private after removing the HTableDescriptor<a name="line.488"></a>
-<span class="sourceLineNo">489</span>     */<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    @InterfaceAudience.Private<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    public ModifyableTableDescriptor(final TableName name) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      this(name, Collections.EMPTY_LIST, Collections.EMPTY_MAP);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>    private ModifyableTableDescriptor(final TableDescriptor desc) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      this(desc.getTableName(), Arrays.asList(desc.getColumnFamilies()), desc.getValues());<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
+<span class="sourceLineNo">415</span>  @Deprecated<a name="line.415"></a>
+<span class="sourceLineNo">416</span>  public TableDescriptorBuilder setOwnerString(String ownerString) {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    desc.setOwnerString(ownerString);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    return this;<a name="line.418"></a>
+<span class="sourceLineNo">419</span>  }<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span>  public TableDescriptorBuilder setPriority(int priority) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    desc.setPriority(priority);<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    return this;<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  }<a name="line.424"></a>
+<span class="sourceLineNo">425</span><a name="line.425"></a>
+<span class="sourceLineNo">426</span>  public TableDescriptorBuilder setReadOnly(final boolean readOnly) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    desc.setReadOnly(readOnly);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    return this;<a name="line.428"></a>
+<span class="sourceLineNo">429</span>  }<a name="line.429"></a>
+<span class="sourceLineNo">430</span><a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public TableDescriptorBuilder setRegionMemStoreReplication(boolean memstoreReplication) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    desc.setRegionMemStoreReplication(memstoreReplication);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    return this;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>  }<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>  public TableDescriptorBuilder setRegionReplication(int regionReplication) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    desc.setRegionReplication(regionReplication);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    return this;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  }<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>  public TableDescriptorBuilder setRegionSplitPolicyClassName(String clazz) {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    desc.setRegionSplitPolicyClassName(clazz);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    return this;<a name="line.443"></a>
+<span class="sourceLineNo">444</span>  }<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span>  public TableDescriptorBuilder setValue(final String key, final String value) {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    desc.setValue(key, value);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    return this;<a name="line.448"></a>
+<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
+<span class="sourceLineNo">450</span><a name="line.450"></a>
+<span class="sourceLineNo">451</span>  public TableDescriptorBuilder setValue(final Bytes key, final Bytes value) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    desc.setValue(key, value);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    return this;<a name="line.453"></a>
+<span class="sourceLineNo">454</span>  }<a name="line.454"></a>
+<span class="sourceLineNo">455</span><a name="line.455"></a>
+<span class="sourceLineNo">456</span>  public TableDescriptorBuilder setValue(final byte[] key, final byte[] value) {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    desc.setValue(key, value);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    return this;<a name="line.458"></a>
+<span class="sourceLineNo">459</span>  }<a name="line.459"></a>
+<span class="sourceLineNo">460</span><a name="line.460"></a>
+<span class="sourceLineNo">461</span>  /**<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * Sets replication scope all &amp; only the columns already in the builder. Columns added later won't<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * be backfilled with replication scope.<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   * @param scope replication scope<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * @return a TableDescriptorBuilder<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   */<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  public TableDescriptorBuilder setReplicationScope(int scope) {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    Map&lt;byte[], ColumnFamilyDescriptor&gt; newFamilies = new TreeMap&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    newFamilies.putAll(desc.families);<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    newFamilies<a name="line.470"></a>
+<span class="sourceLineNo">471</span>        .forEach((cf, cfDesc) -&gt; {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>          desc.removeColumnFamily(cf);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>          desc.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(cfDesc).setScope(scope)<a name="line.473"></a>
+<span class="sourceLineNo">474</span>              .build());<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        });<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    return this;<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>  public TableDescriptor build() {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    return new ModifyableTableDescriptor(desc);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>  }<a name="line.481"></a>
+<span class="sourceLineNo">482</span><a name="line.482"></a>
+<span class="sourceLineNo">483</span>  /**<a name="line.483"></a>
+<span class="sourceLineNo">484</span>   * TODO: make this private after removing the HTableDescriptor<a name="line.484"></a>
+<span class="sourceLineNo">485</span>   */<a name="line.485"></a>
+<span class="sourceLineNo">486</span>  @InterfaceAudience.Private<a name="line.486"></a>
+<span class="sourceLineNo">487</span>  public static class ModifyableTableDescriptor<a name="line.487"></a>
+<span class="sourceLineNo">488</span>          implements TableDescriptor, Comparable&lt;ModifyableTableDescriptor&gt; {<a name="line.488"></a>
+<span class="sourceLineNo">489</span><a name="line.489"></a>
+<span class="sourceLineNo">490</span>    private final TableName name;<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span>    /**<a name="line.492"></a>
+<span class="sourceLineNo">493</span>     * A map which holds the metadata information of the table. This metadata<a name="line.493"></a>
+<span class="sourceLineNo">494</span>     * includes values like IS_META, SPLIT_POLICY, MAX_FILE_SIZE,<a name="line.494"></a>
+<span class="sourceLineNo">495</span>     * READONLY, MEMSTORE_FLUSHSIZE etc...<a name="line.495"></a>
+<span class="sourceLineNo">496</span>     */<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    private final Map&lt;Bytes, Bytes&gt; values = new HashMap&lt;&gt;();<a name="line.497"></a>
 <span class="sourceLineNo">498</span><a name="line.498"></a>
 <span class="sourceLineNo">499</span>    /**<a name="line.499"></a>
-<span class="sourceLineNo">500</span>     * Construct a table descriptor by cloning the descriptor passed as a<a name="line.500"></a>
-<span class="sourceLineNo">501</span>     * parameter.<a name="line.501"></a>
-<span class="sourceLineNo">502</span>     * &lt;p&gt;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>     * Makes a deep copy of the supplied descriptor.<a name="line.503"></a>
-<span class="sourceLineNo">504</span>     * @param name The new name<a name="line.504"></a>
-<span class="sourceLineNo">505</span>     * @param desc The descriptor.<a name="line.505"></a>
-<span class="sourceLineNo">506</span>     * TODO: make this private after removing the HTableDescriptor<a name="line.506"></a>
-<span class="sourceLineNo">507</span>     */<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    @InterfaceAudience.Private<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    @Deprecated // only used by HTableDescriptor. remove this method if HTD is removed<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    public ModifyableTableDescriptor(final TableName name, final TableDescriptor desc) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      this(name, Arrays.asList(desc.getColumnFamilies()), desc.getValues());<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>    private ModifyableTableDescriptor(final TableName name, final Collection&lt;ColumnFamilyDescriptor&gt; families,<a name="line.514"></a>
-<span class="sourceLineNo">515</span>            Map&lt;Bytes, Bytes&gt; values) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      this.name = name;<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      families.forEach(c -&gt; this.families.put(c.getName(), ColumnFamilyDescriptorBuilder.copy(c)));<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      this.values.putAll(values);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      this.values.put(IS_META_KEY,<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        new Bytes(Bytes.toBytes(Boolean.toString(name.equals(TableName.META_TABLE_NAME)))));<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    }<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    /**<a name="line.523"></a>
-<span class="sourceLineNo">524</span>     * Checks if this table is &lt;code&gt; hbase:meta &lt;/code&gt; region.<a name="line.524"></a>
-<span class="sourceLineNo">525</span>     *<a name="line.525"></a>
-<span class="sourceLineNo">526</span>     * @return true if this table is &lt;code&gt; hbase:meta &lt;/code&gt; region<a name="line.526"></a>
-<span class="sourceLineNo">527</span>     */<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    @Override<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    public boolean isMetaRegion() {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      return getOrDefault(IS_META_KEY, Boolean::valueOf, false);<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>    /**<a name="line.533"></a>
-<span class="sourceLineNo">534</span>     * Checks if the table is a &lt;code&gt;hbase:meta&lt;/code&gt; table<a name="line.534"></a>
-<span class="sourceLineNo">535</span>     *<a name="line.535"></a>
-<span class="sourceLineNo">536</span>     * @return true if table is &lt;code&gt; hbase:meta &lt;/code&gt; region.<a name="line.536"></a>
-<span class="sourceLineNo">537</span>     */<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    @Override<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    public boolean isMetaTable() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return isMetaRegion();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>    @Override<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    public Bytes getValue(Bytes key) {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      Bytes rval = values.get(key);<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      return rval == null ? null : new Bytes(rval.copyBytes());<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
+<span class="sourceLineNo">500</span>     * Maps column family name to the respective FamilyDescriptors<a name="line.500"></a>
+<span class="sourceLineNo">501</span>     */<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    private final Map&lt;byte[], ColumnFamilyDescriptor&gt; families<a name="line.502"></a>
+<span class="sourceLineNo">503</span>            = new TreeMap&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.503"></a>
+<span class="sourceLineNo">504</span><a name="line.504"></a>
+<span class="sourceLineNo">505</span>    /**<a name="line.505"></a>
+<span class="sourceLineNo">506</span>     * Construct a table descriptor specifying a TableName object<a name="line.506"></a>
+<span class="sourceLineNo">507</span>     *<a name="line.507"></a>
+<span class="sourceLineNo">508</span>     * @param name Table name.<a name="line.508"></a>
+<span class="sourceLineNo">509</span>     * TODO: make this private after removing the HTableDescriptor<a name="line.509"></a>
+<span class="sourceLineNo">510</span>     */<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    @InterfaceAudience.Private<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    public ModifyableTableDescriptor(final TableName name) {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>      this(name, Collections.EMPTY_LIST, Collections.EMPTY_MAP);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    }<a name="line.514"></a>
+<span class="sourceLineNo">515</span><a name="line.515"></a>
+<span class="sourceLineNo">516</span>    private ModifyableTableDescriptor(final TableDescriptor desc) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>      this(desc.getTableName(), Arrays.asList(desc.getColumnFamilies()), desc.getValues());<a name="line.517"></a>
+<span class="sourceLineNo">518</span>    }<a name="line.518"></a>
+<span class="sourceLineNo">519</span><a name="line.519"></a>
+<span class="sourceLineNo">520</span>    /**<a name="line.520"></a>
+<span class="sourceLineNo">521</span>     * Construct a table descriptor by cloning the descriptor passed as a<a name="line.521"></a>
+<span class="sourceLineNo">522</span>     * parameter.<a name="line.522"></a>
+<span class="sourceLineNo">523</span>     * &lt;p&gt;<a name="line.523"></a>
+<span class="sourceLineNo">524</span>     * Makes a deep copy of the supplied descriptor.<a name="line.524"></a>
+<span class="sourceLineNo">525</span>     * @param name The new name<a name="line.525"></a>
+<span class="sourceLineNo">526</span>     * @param desc The descriptor.<a name="line.526"></a>
+<span class="sourceLineNo">527</span>     * TODO: make this private after removing the HTableDescriptor<a name="line.527"></a>
+<span class="sourceLineNo">528</span>     */<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    @InterfaceAudience.Private<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    @Deprecated // only used by HTableDescriptor. remove this method if HTD is removed<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    public ModifyableTableDescriptor(final TableName name, final TableDescriptor desc) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      this(name, Arrays.asList(desc.getColumnFamilies()), desc.getValues());<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>    private ModifyableTableDescriptor(final TableName name, final Collection&lt;ColumnFamilyDescriptor&gt; families,<a name="line.535"></a>
+<span class="sourceLineNo">536</span>            Map&lt;Bytes, Bytes&gt; values) {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      this.name = name;<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      families.forEach(c -&gt; this.families.put(c.getName(), ColumnFamilyDescriptorBuilder.copy(c)));<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      this.values.putAll(values);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>      this.values.put(IS_META_KEY,<a name="line.540"></a>
+<span class="sourceLineNo">541</span>        new Bytes(Bytes.toBytes(Boolean.toString(name.equals(TableName.META_TABLE_NAME)))));<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    }<a name="line.542"></a>
+<span class="sourceLineNo">543</span><a name="line.543"></a>
+<span class="sourceLineNo">544</span>    /**<a name="line.544"></a>
+<span class="sourceLineNo">545</span>     * Checks if this table is &lt;code&gt; hbase:meta &lt;/code&gt; region.<a name="line.545"></a>
+<span class="sourceLineNo">546</span>     *<a name="line.546"></a>
+<span class="sourceLineNo">547</span>     * @return true if this table is &lt;code&gt; hbase:meta &lt;/code&gt; region<a name="line.547"></a>
+<span class="sourceLineNo">548</span>     */<a name="line.548"></a>
 <span class="sourceLineNo">549</span>    @Override<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    public String getValue(String key) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      Bytes rval = values.get(new Bytes(Bytes.toBytes(key)));<a name="line.551"></a>
-<span class="sourceLineNo">552</span>      return rval == null ? null : Bytes.toString(rval.get(), rval.getOffset(), rval.getLength());<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
-<span class="sourceLineNo">554</span><a name="line.554"></a>
-<span class="sourceLineNo">555</span>    @Override<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    public byte[] getValue(byte[] key) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      Bytes value = values.get(new Bytes(key));<a name="line.557"></a>
-<span class="sourceLineNo">558</span>      return value == null ? null : value.copyBytes();<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    }<a name="line.559"></a>
-<span class="sourceLineNo">560</span><a name="line.560"></a>
-<span class="sourceLineNo">561</span>    private &lt;T&gt; T getOrDefault(Bytes key, Function&lt;String, T&gt; function, T defaultValue) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      Bytes value = values.get(key);<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      if (value == null) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>        return defaultValue;<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      } else {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>        return function.apply(Bytes.toString(value.get(), value.getOffset(), value.getLength()));<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      }<a name="line.567"></a>
+<span class="sourceLineNo">550</span>    public boolean isMetaRegion() {<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      return getOrDefault(IS_META_KEY, Boolean::valueOf, false);<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    }<a name="line.552"></a>
+<span class="sourceLineNo">553</span><a name="line.553"></a>
+<span class="sourceLineNo">554</span>    /**<a name="line.554"></a>
+<span class="sourceLineNo">555</span>     * Checks if the table is a &lt;code&gt;hbase:meta&lt;/code&gt; table<a name="line.555"></a>
+<span class="sourceLineNo">556</span>     *<a name="line.556"></a>
+<span class="sourceLineNo">557</span>     * @return true if table is &lt;code&gt; hbase:meta &lt;/code&gt; region.<a name="line.557"></a>
+<span class="sourceLineNo">558</span>     */<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    @Override<a name="line.559"></a>
+<span class="sourceLineNo">560</span>    public boolean isMetaTable() {<a name="line.560"></a>
+<span class="sourceLineNo">561</span>      return isMetaRegion();<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    }<a name="line.562"></a>
+<span class="sourceLineNo">563</span><a name="line.563"></a>
+<span class="sourceLineNo">564</span>    @Override<a name="line.564"></a>
+<span class="sourceLineNo">565</span>    public Bytes getValue(Bytes key) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      Bytes rval = values.get(key);<a name="line.566"></a>
+<span class="sourceLineNo">567</span>      return rval == null ? null : new Bytes(rval.copyBytes());<a name="line.567"></a>
 <span class="sourceLineNo">568</span>    }<a name="line.568"></a>
 <span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>    /**<a name="line.570"></a>
-<span class="sourceLineNo">571</span>     * Getter for fetching an unmodifiable {@link #values} map.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>     *<a name="line.572"></a>
-<span class="sourceLineNo">573</span>     * @return unmodifiable map {@link #values}.<a name="line.573"></a>
-<span class="sourceLineNo">574</span>     * @see #values<a name="line.574"></a>
-<span class="sourceLineNo">575</span>     */<a name="line.575"></a>
+<span class="sourceLineNo">570</span>    @Override<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    public String getValue(String key) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      Bytes rval = values.get(new Bytes(Bytes.toBytes(key)));<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      return rval == null ? null : Bytes.toString(rval.get(), rval.getOffset(), rval.getLength());<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>    @Override<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    public Map&lt;Bytes, Bytes&gt; getValues() {<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      // shallow pointer copy<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      return Collections.unmodifiableMap(values);<a name="line.579"></a>
+<span class="sourceLineNo">577</span>    public byte[] getValue(byte[] key) {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>      Bytes value = values.get(new Bytes(key));<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      return value == null ? null : value.copyBytes();<a name="line.579"></a>
 <span class="sourceLineNo">580</span>    }<a name="line.580"></a>
 <span class="sourceLineNo">581</span><a name="line.581"></a>
-<span class="sourceLineNo">582</span>    /**<a name="line.582"></a>
-<span class="sourceLineNo">583</span>     * Setter for storing metadata as a (key, value) pair in {@link #values} map<a name="line.583"></a>
-<span class="sourceLineNo">584</span>     *<a name="line.584"></a>
-<span class="sourceLineNo">585</span>     * @param key The key.<a name="line.585"></a>
-<span class="sourceLineNo">586</span>     * @param value The value. If null, removes the setting.<a name="line.586"></a>
-<span class="sourceLineNo">587</span>     * @return the modifyable TD<a name="line.587"></a>
-<span class="sourceLineNo">588</span>     * @see #values<a name="line.588"></a>
-<span class="sourceLineNo">589</span>     */<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    public ModifyableTableDescriptor setValue(byte[] key, byte[] value) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>      return setValue(toBytesOrNull(key, v -&gt; v),<a name="line.591"></a>
-<span class="sourceLineNo">592</span>              toBytesOrNull(value, v -&gt; v));<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>    public ModifyableTableDescriptor setValue(String key, String value) {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>      return setValue(toBytesOrNull(key, Bytes::toBytes),<a name="line.596"></a>
-<span class="sourceLineNo">597</span>              toBytesOrNull(value, Bytes::toBytes));<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    }<a name="line.598"></a>
-<span class="sourceLineNo">599</span><a name="line.599"></a>
-<span class="sourceLineNo">600</span>    /*<a name="line.600"></a>
-<span class="sourceLineNo">601</span>     * @param key The key.<a name="line.601"></a>
-<span class="sourceLineNo">602</span>     * @param value The value. If null, removes the setting.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>     */<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    private ModifyableTableDescriptor setValue(final Bytes key,<a name="line.604"></a>
-<span class="sourceLineNo">605</span>            final String value) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      return setValue(key, toBytesOrNull(value, Bytes::toBytes));<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    }<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>     * Setter for storing metadata as a (key, value) pair in {@link #values} map<a name="line.610"></a>
-<span class="sourceLineNo">611</span>     *<a name="line.611"></a>
-<span class="sourceLineNo">612</span>     * @param key The key.<a name="line.612"></a>
-<span class="sourceLineNo">613</span>     * @param value The value. If null, removes the setting.<a name="line.613"></a>
-<span class="sourceLineNo">614</span>     */<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    public ModifyableTableDescriptor setValue(final Bytes key, final Bytes value) {<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      if (value == null) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        values.remove(key);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      } else {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>        values.put(key, value);<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      }<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      return this;<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    }<a name="line.622"></a>
-<span class="sourceLineNo">623</span><a name="line.623"></a>
-<span class="sourceLineNo">624</span>    private static &lt;T&gt; Bytes toBytesOrNull(T t, Function&lt;T, byte[]&gt; f) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      if (t == null) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        return null;<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      } else {<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        return new Bytes(f.apply(t));<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      }<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    }<a name="line.630"></a>
-<span class="sourceLineNo">631</span><a name="line.631"></a>
-<span class="sourceLineNo">632</span>    /**<a name="line.632"></a>
-<span class="sourceLineNo">633</span>     * Remove metadata represented by the key from the {@link #values} map<a name="line.633"></a>
-<span class="sourceLineNo">634</span>     *<a name="line.634"></a>
-<span class="sourceLineNo">635</span>     * @param key Key whose key and value we're to remove from TableDescriptor<a name="line.635"></a>
-<span class="sourceLineNo">636</span>     * parameters.<a name="line.636"></a>
-<span class="sourceLineNo">637</span>     * @return the modifyable TD<a name="line.637"></a>
-<span class="sourceLineNo">638</span>     */<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    public ModifyableTableDescriptor removeValue(Bytes key) {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      return setValue(key, (Bytes) null);<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">643</span>    /**<a name="line.643"></a>
-<span class="sourceLineNo">644</span>     * Remove metadata represented by the key from the {@link #values} map<a name="line.644"></a>
-<span class="sourceLineNo">645</span>     *<a name="line.645"></a>
-<span class="sourceLineNo">646</span>     * @param key Key whose key and value we're to remove from TableDescriptor<a name="line.646"></a>
-<span class="sourceLineNo">647</span>     * parameters.<a name="line.647"></a>
-<span class="sourceLineNo">648</span>     * @return the modifyable TD<a name="line.648"></a>
-<span class="sourceLineNo">649</span>     */<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    public ModifyableTableDescriptor removeValue(final byte[] key) {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      return removeValue(new Bytes(key));<a name="line.651"></a>
-<span class="sourceLineNo">652</span>    }<a name="line.652"></a>
-<span class="sourceLineNo">653</span><a name="line.653"></a>
-<span class="sourceLineNo">654</span>    /**<a name="line.654"></a>
-<span class="sourceLineNo">655</span>     * Check if the readOnly flag of the table is set. If the readOnly flag is<a name="line.655"></a>
-<span class="sourceLineNo">656</span>     * set then the contents of the table can only be read from but not<a name="line.656"></a>
-<span class="sourceLineNo">657</span>     * modified.<a name="line.657"></a>
-<span class="sourceLineNo">658</span>     *<a name="line.658"></a>
-<span class="sourceLineNo">659</span>     * @return true if all columns in the table should be read only<a name="line.659"></a>
-<span class="sourceLineNo">660</span>     */<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    @Override<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    public boolean isReadOnly() {<a name="line.662"></a>
-<span class="sourceLineNo">663</span>      return getOrDefault(READONLY_KEY, Boolean::valueOf, DEFAULT_READONLY);<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    }<a name="line.664"></a>
-<span class="sourceLineNo">665</span><a name="line.665"></a>
-<span class="sourceLineNo">666</span>    /**<a name="line.666"></a>
-<span class="sourceLineNo">667</span>     * Setting the table as read only sets all the columns in the table as read<a name="line.667"></a>
-<span class="sourceLineNo">668</span>     * only. By default all tables are modifiable, but if the readOnly flag is<a name="line.668"></a>
-<span class="sourceLineNo">669</span>     * set to true then the contents of the table can only be read but not<a name="line.669"></a>
-<span class="sourceLineNo">670</span>     * modified.<a name="line.670"></a>
-<span class="sourceLineNo">671</span>     *<a name="line.671"></a>
-<span class="sourceLineNo">672</span>     * @param readOnly True if all of the columns in the 

<TRUNCATED>

[05/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
index 9c54904..0a656db 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
@@ -1371,589 +1371,581 @@
 <span class="sourceLineNo">1363</span>    assert subprocStack != null : "Called rollback with no steps executed rootProc=" + rootProc;<a name="line.1363"></a>
 <span class="sourceLineNo">1364</span><a name="line.1364"></a>
 <span class="sourceLineNo">1365</span>    int stackTail = subprocStack.size();<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>    boolean reuseLock = false;<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>    while (stackTail --&gt; 0) {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>      Procedure&lt;TEnvironment&gt; proc = subprocStack.get(stackTail);<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span><a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>      LockState lockState;<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>      if (!reuseLock &amp;&amp; (lockState = acquireLock(proc)) != LockState.LOCK_ACQUIRED) {<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>        // can't take a lock on the procedure, add the root-proc back on the<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>        // queue waiting for the lock availability<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>        return lockState;<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>      }<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span><a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      lockState = executeRollback(proc);<a name="line.1377"></a>
+<span class="sourceLineNo">1366</span>    while (stackTail-- &gt; 0) {<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>      Procedure&lt;TEnvironment&gt; proc = subprocStack.get(stackTail);<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span><a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>      LockState lockState = acquireLock(proc);<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>      if (lockState != LockState.LOCK_ACQUIRED) {<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>        // can't take a lock on the procedure, add the root-proc back on the<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>        // queue waiting for the lock availability<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>        return lockState;<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>      }<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span><a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>      lockState = executeRollback(proc);<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      releaseLock(proc, false);<a name="line.1377"></a>
 <span class="sourceLineNo">1378</span>      boolean abortRollback = lockState != LockState.LOCK_ACQUIRED;<a name="line.1378"></a>
 <span class="sourceLineNo">1379</span>      abortRollback |= !isRunning() || !store.isRunning();<a name="line.1379"></a>
 <span class="sourceLineNo">1380</span><a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      // If the next procedure is the same to this one<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      // (e.g. StateMachineProcedure reuse the same instance)<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      // we can avoid to lock/unlock each step<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>      reuseLock = stackTail &gt; 0 &amp;&amp; (subprocStack.get(stackTail - 1) == proc) &amp;&amp; !abortRollback;<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>      if (!reuseLock &amp;&amp; proc.hasLock()) {<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        releaseLock(proc, false);<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>      }<a name="line.1387"></a>
+<span class="sourceLineNo">1381</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      // useful to test the procedure recovery.<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>      if (abortRollback) {<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>        return lockState;<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>      }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span><a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>      subprocStack.remove(stackTail);<a name="line.1387"></a>
 <span class="sourceLineNo">1388</span><a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>      // useful to test the procedure recovery.<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      if (abortRollback) {<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>        return lockState;<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>      }<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span><a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>      subprocStack.remove(stackTail);<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span><a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>      if (proc.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>        return LockState.LOCK_YIELD_WAIT;<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>      }<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span><a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>      if (proc != rootProc) {<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>        execCompletionCleanup(proc);<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      }<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>    }<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span><a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    // Finalize the procedure state<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>    LOG.info("Rolled back " + rootProc +<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>             " exec-time=" + StringUtils.humanTimeDiff(rootProc.elapsedTime()));<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>    procedureFinished(rootProc);<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>    return LockState.LOCK_ACQUIRED;<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>  }<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span><a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>  /**<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>   * Execute the rollback of the procedure step.<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>   * It updates the store with the new state (stack index)<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>   * or will remove completly the procedure in case it is a child.<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>   */<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>  private LockState executeRollback(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>    try {<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>      proc.doRollback(getEnvironment());<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>    } catch (IOException e) {<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>      LOG.debug("Roll back attempt failed for {}", proc, e);<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>    } catch (InterruptedException e) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>      handleInterruptedException(proc, e);<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>    } catch (Throwable e) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>      LOG.error(HBaseMarkers.FATAL, "CODE-BUG: Uncaught runtime exception for " + proc, e);<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>    }<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span><a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>    // allows to kill the executor before something is stored to the wal.<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>    // useful to test the procedure recovery.<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>    if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate()) {<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>      String msg = "TESTING: Kill before store update";<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>      LOG.debug(msg);<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      stop();<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>      throw new RuntimeException(msg);<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    }<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span><a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>    if (proc.removeStackIndex()) {<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      proc.setState(ProcedureState.ROLLEDBACK);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span><a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      // update metrics on finishing the procedure (fail)<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>      proc.updateMetricsOnFinish(getEnvironment(), proc.elapsedTime(), false);<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span><a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>      if (proc.hasParent()) {<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>        store.delete(proc.getProcId());<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>        procedures.remove(proc.getProcId());<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      } else {<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>        final long[] childProcIds = rollbackStack.get(proc.getProcId()).getSubprocedureIds();<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>        if (childProcIds != null) {<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>          store.delete(proc, childProcIds);<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>        } else {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>          store.update(proc);<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>        }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      }<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>    } else {<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>      store.update(proc);<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    }<a name="line.1461"></a>
+<span class="sourceLineNo">1389</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>      if (proc.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        return LockState.LOCK_YIELD_WAIT;<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span><a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      if (proc != rootProc) {<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>        execCompletionCleanup(proc);<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>      }<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>    }<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span><a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>    // Finalize the procedure state<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>    LOG.info("Rolled back " + rootProc +<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>             " exec-time=" + StringUtils.humanTimeDiff(rootProc.elapsedTime()));<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>    procedureFinished(rootProc);<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>    return LockState.LOCK_ACQUIRED;<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>  }<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span><a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>  /**<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>   * Execute the rollback of the procedure step.<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>   * It updates the store with the new state (stack index)<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>   * or will remove completly the procedure in case it is a child.<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>   */<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>  private LockState executeRollback(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>    try {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>      proc.doRollback(getEnvironment());<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>    } catch (IOException e) {<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      LOG.debug("Roll back attempt failed for {}", proc, e);<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>    } catch (InterruptedException e) {<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>      handleInterruptedException(proc, e);<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>    } catch (Throwable e) {<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>      LOG.error(HBaseMarkers.FATAL, "CODE-BUG: Uncaught runtime exception for " + proc, e);<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>    }<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span><a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>    // allows to kill the executor before something is stored to the wal.<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    // useful to test the procedure recovery.<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>    if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate()) {<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>      String msg = "TESTING: Kill before store update";<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      LOG.debug(msg);<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      stop();<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>      throw new RuntimeException(msg);<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>    }<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span><a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>    if (proc.removeStackIndex()) {<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>      proc.setState(ProcedureState.ROLLEDBACK);<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span><a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>      // update metrics on finishing the procedure (fail)<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>      proc.updateMetricsOnFinish(getEnvironment(), proc.elapsedTime(), false);<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span><a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>      if (proc.hasParent()) {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>        store.delete(proc.getProcId());<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>        procedures.remove(proc.getProcId());<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      } else {<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>        final long[] childProcIds = rollbackStack.get(proc.getProcId()).getSubprocedureIds();<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>        if (childProcIds != null) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>          store.delete(proc, childProcIds);<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>        } else {<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>          store.update(proc);<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>        }<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>      }<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>    } else {<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>      store.update(proc);<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>    }<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span><a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>    return LockState.LOCK_ACQUIRED;<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>  }<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span><a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>  private void yieldProcedure(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>    releaseLock(proc, false);<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    scheduler.yield(proc);<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>  }<a name="line.1461"></a>
 <span class="sourceLineNo">1462</span><a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>    return LockState.LOCK_ACQUIRED;<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>  }<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span><a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>  private void yieldProcedure(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>    releaseLock(proc, false);<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>    scheduler.yield(proc);<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>  }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span><a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>  /**<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>   * Executes &lt;code&gt;procedure&lt;/code&gt;<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>   * &lt;ul&gt;<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>   *  &lt;li&gt;Calls the doExecute() of the procedure<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>   *  &lt;li&gt;If the procedure execution didn't fail (i.e. valid user input)<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>   *  &lt;ul&gt;<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>   *    &lt;li&gt;...and returned subprocedures<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>   *    &lt;ul&gt;&lt;li&gt;The subprocedures are initialized.<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>   *      &lt;li&gt;The subprocedures are added to the store<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>   *      &lt;li&gt;The subprocedures are added to the runnable queue<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>   *      &lt;li&gt;The procedure is now in a WAITING state, waiting for the subprocedures to complete<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>   *    &lt;/ul&gt;<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>   *    &lt;/li&gt;<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>   *   &lt;li&gt;...if there are no subprocedure<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>   *    &lt;ul&gt;&lt;li&gt;the procedure completed successfully<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>   *      &lt;li&gt;if there is a parent (WAITING)<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>   *      &lt;li&gt;the parent state will be set to RUNNABLE<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>   *    &lt;/ul&gt;<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>   *   &lt;/li&gt;<a name="line.1489"></a>
+<span class="sourceLineNo">1463</span>  /**<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>   * Executes &lt;code&gt;procedure&lt;/code&gt;<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>   * &lt;ul&gt;<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>   *  &lt;li&gt;Calls the doExecute() of the procedure<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>   *  &lt;li&gt;If the procedure execution didn't fail (i.e. valid user input)<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>   *  &lt;ul&gt;<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>   *    &lt;li&gt;...and returned subprocedures<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>   *    &lt;ul&gt;&lt;li&gt;The subprocedures are initialized.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>   *      &lt;li&gt;The subprocedures are added to the store<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>   *      &lt;li&gt;The subprocedures are added to the runnable queue<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>   *      &lt;li&gt;The procedure is now in a WAITING state, waiting for the subprocedures to complete<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>   *    &lt;/ul&gt;<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>   *    &lt;/li&gt;<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>   *   &lt;li&gt;...if there are no subprocedure<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>   *    &lt;ul&gt;&lt;li&gt;the procedure completed successfully<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>   *      &lt;li&gt;if there is a parent (WAITING)<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>   *      &lt;li&gt;the parent state will be set to RUNNABLE<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>   *    &lt;/ul&gt;<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>   *   &lt;/li&gt;<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>   *  &lt;/ul&gt;<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>   *  &lt;/li&gt;<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>   *  &lt;li&gt;In case of failure<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>   *  &lt;ul&gt;<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>   *    &lt;li&gt;The store is updated with the new state&lt;/li&gt;<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>   *    &lt;li&gt;The executor (caller of this method) will start the rollback of the procedure&lt;/li&gt;<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>   *  &lt;/ul&gt;<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>   *  &lt;/li&gt;<a name="line.1489"></a>
 <span class="sourceLineNo">1490</span>   *  &lt;/ul&gt;<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>   *  &lt;/li&gt;<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>   *  &lt;li&gt;In case of failure<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>   *  &lt;ul&gt;<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>   *    &lt;li&gt;The store is updated with the new state&lt;/li&gt;<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>   *    &lt;li&gt;The executor (caller of this method) will start the rollback of the procedure&lt;/li&gt;<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>   *  &lt;/ul&gt;<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>   *  &lt;/li&gt;<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>   *  &lt;/ul&gt;<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>   */<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  private void execProcedure(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>    Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>        "NOT RUNNABLE! " + procedure.toString());<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span><a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    // Procedures can suspend themselves. They skip out by throwing a ProcedureSuspendedException.<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    // The exception is caught below and then we hurry to the exit without disturbing state. The<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>    // idea is that the processing of this procedure will be unsuspended later by an external event<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>    // such the report of a region open.<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    boolean suspended = false;<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span><a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    // Whether to 're-' -execute; run through the loop again.<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>    boolean reExecute = false;<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span><a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    Procedure&lt;TEnvironment&gt;[] subprocs = null;<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>    do {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>      reExecute = false;<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>      try {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>        subprocs = procedure.doExecute(getEnvironment());<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>        if (subprocs != null &amp;&amp; subprocs.length == 0) {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>          subprocs = null;<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        }<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      } catch (ProcedureSuspendedException e) {<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        LOG.trace("Suspend {}", procedure);<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>        suspended = true;<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>      } catch (ProcedureYieldException e) {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>        LOG.trace("Yield {}", procedure, e);<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>        yieldProcedure(procedure);<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>        return;<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      } catch (InterruptedException e) {<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        LOG.trace("Yield interrupt {}", procedure, e);<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>        handleInterruptedException(procedure, e);<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>        yieldProcedure(procedure);<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>        return;<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>      } catch (Throwable e) {<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>        // Catch NullPointerExceptions or similar errors...<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>        String msg = "CODE-BUG: Uncaught runtime exception: " + procedure;<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>        LOG.error(msg, e);<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>        procedure.setFailure(new RemoteProcedureException(msg, e));<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>      }<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span><a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      if (!procedure.isFailed()) {<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>        if (subprocs != null) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>          if (subprocs.length == 1 &amp;&amp; subprocs[0] == procedure) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>            // Procedure returned itself. Quick-shortcut for a state machine-like procedure;<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>            // i.e. we go around this loop again rather than go back out on the scheduler queue.<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>            subprocs = null;<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>            reExecute = true;<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>            LOG.trace("Short-circuit to next step on pid={}", procedure.getProcId());<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          } else {<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>            // Yield the current procedure, and make the subprocedure runnable<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>            // subprocs may come back 'null'.<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            subprocs = initializeChildren(procStack, procedure, subprocs);<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            LOG.info("Initialized subprocedures=" +<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>              (subprocs == null? null:<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>                Stream.of(subprocs).map(e -&gt; "{" + e.toString() + "}").<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>                collect(Collectors.toList()).toString()));<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>          }<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>        } else if (procedure.getState() == ProcedureState.WAITING_TIMEOUT) {<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>          LOG.trace("Added to timeoutExecutor {}", procedure);<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>          timeoutExecutor.add(procedure);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>        } else if (!suspended) {<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>          // No subtask, so we are done<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>          procedure.setState(ProcedureState.SUCCESS);<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        }<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      }<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span><a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>      // Add the procedure to the stack<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      procStack.addRollbackStep(procedure);<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span><a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      // useful to test the procedure recovery.<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>      if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate(suspended)) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>        String msg = "TESTING: Kill before store update: " + procedure;<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>        LOG.debug(msg);<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>        stop();<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        throw new RuntimeException(msg);<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>      }<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span><a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>      //<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      // Commit the transaction even if a suspend (state may have changed). Note this append<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      // can take a bunch of time to complete.<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span><a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      // if the store is not running we are aborting<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      if (!store.isRunning()) {<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>        return;<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>      }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>        yieldProcedure(procedure);<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>        return;<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>      }<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>    } while (reExecute);<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    // Submit the new subprocedures<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>      submitChildrenProcedures(subprocs);<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>    }<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span><a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>    // we need to log the release lock operation before waking up the parent procedure, as there<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    // could be race that the parent procedure may call updateStoreOnExec ahead of us and remove all<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>    // the sub procedures from store and cause problems...<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    releaseLock(procedure, false);<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span><a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>    // if the procedure is complete and has a parent, count down the children latch.<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>    // If 'suspended', do nothing to change state -- let other threads handle unsuspend event.<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    if (!suspended &amp;&amp; procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      countDownChildren(procStack, procedure);<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span><a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>  private Procedure&lt;TEnvironment&gt;[] initializeChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    assert subprocs != null : "expected subprocedures";<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      if (subproc == null) {<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>          new IllegalArgumentIOException(msg)));<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>        return null;<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>      }<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span><a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>      subproc.setRootProcId(rootProcId);<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>      subproc.setProcId(nextProcId());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>      procStack.addSubProcedure(subproc);<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>    }<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span><a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    if (!procedure.isFailed()) {<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>      switch (procedure.getState()) {<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>        case RUNNABLE:<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>          break;<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>        case WAITING_TIMEOUT:<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>          timeoutExecutor.add(procedure);<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>          break;<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>        default:<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>          break;<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>      }<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>    }<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    return subprocs;<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>  }<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span><a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>  private void submitChildrenProcedures(Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>      subproc.updateMetricsOnSubmit(getEnvironment());<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      scheduler.addFront(subproc);<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>  }<a name="line.1663"></a>
+<span class="sourceLineNo">1491</span>   */<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>  private void execProcedure(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>    Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>        "NOT RUNNABLE! " + procedure.toString());<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span><a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>    // Procedures can suspend themselves. They skip out by throwing a ProcedureSuspendedException.<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>    // The exception is caught below and then we hurry to the exit without disturbing state. The<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>    // idea is that the processing of this procedure will be unsuspended later by an external event<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>    // such the report of a region open.<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>    boolean suspended = false;<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span><a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    // Whether to 're-' -execute; run through the loop again.<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>    boolean reExecute = false;<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span><a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>    Procedure&lt;TEnvironment&gt;[] subprocs = null;<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>    do {<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>      reExecute = false;<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      try {<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>        subprocs = procedure.doExecute(getEnvironment());<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>        if (subprocs != null &amp;&amp; subprocs.length == 0) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>          subprocs = null;<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        }<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>      } catch (ProcedureSuspendedException e) {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>        LOG.trace("Suspend {}", procedure);<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>        suspended = true;<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>      } catch (ProcedureYieldException e) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>        LOG.trace("Yield {}", procedure, e);<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>        yieldProcedure(procedure);<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>        return;<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>      } catch (InterruptedException e) {<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        LOG.trace("Yield interrupt {}", procedure, e);<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>        handleInterruptedException(procedure, e);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>        yieldProcedure(procedure);<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>        return;<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      } catch (Throwable e) {<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>        // Catch NullPointerExceptions or similar errors...<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>        String msg = "CODE-BUG: Uncaught runtime exception: " + procedure;<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>        LOG.error(msg, e);<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>        procedure.setFailure(new RemoteProcedureException(msg, e));<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>      }<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span><a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      if (!procedure.isFailed()) {<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>        if (subprocs != null) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>          if (subprocs.length == 1 &amp;&amp; subprocs[0] == procedure) {<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>            // Procedure returned itself. Quick-shortcut for a state machine-like procedure;<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>            // i.e. we go around this loop again rather than go back out on the scheduler queue.<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>            subprocs = null;<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>            reExecute = true;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>            LOG.trace("Short-circuit to next step on pid={}", procedure.getProcId());<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>          } else {<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>            // Yield the current procedure, and make the subprocedure runnable<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>            // subprocs may come back 'null'.<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>            subprocs = initializeChildren(procStack, procedure, subprocs);<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>            LOG.info("Initialized subprocedures=" +<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>              (subprocs == null? null:<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>                Stream.of(subprocs).map(e -&gt; "{" + e.toString() + "}").<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>                collect(Collectors.toList()).toString()));<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>          }<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>        } else if (procedure.getState() == ProcedureState.WAITING_TIMEOUT) {<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>          LOG.trace("Added to timeoutExecutor {}", procedure);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>          timeoutExecutor.add(procedure);<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>        } else if (!suspended) {<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          // No subtask, so we are done<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          procedure.setState(ProcedureState.SUCCESS);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>        }<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>      }<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span><a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>      // Add the procedure to the stack<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>      procStack.addRollbackStep(procedure);<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span><a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>      // useful to test the procedure recovery.<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>      if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate(suspended)) {<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>        String msg = "TESTING: Kill before store update: " + procedure;<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        LOG.debug(msg);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>        stop();<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>        throw new RuntimeException(msg);<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>      }<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span><a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      //<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>      // Commit the transaction even if a suspend (state may have changed). Note this append<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>      // can take a bunch of time to complete.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span><a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      // if the store is not running we are aborting<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>      if (!store.isRunning()) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>        return;<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>      }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>        yieldProcedure(procedure);<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>        return;<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>      }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>    } while (reExecute);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>    // Submit the new subprocedures<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      submitChildrenProcedures(subprocs);<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>    }<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span><a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    // we need to log the release lock operation before waking up the parent procedure, as there<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    // could be race that the parent procedure may call updateStoreOnExec ahead of us and remove all<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    // the sub procedures from store and cause problems...<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    releaseLock(procedure, false);<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span><a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    // if the procedure is complete and has a parent, count down the children latch.<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>    // If 'suspended', do nothing to change state -- let other threads handle unsuspend event.<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    if (!suspended &amp;&amp; procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      countDownChildren(procStack, procedure);<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>    }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>  }<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span><a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>  private Procedure&lt;TEnvironment&gt;[] initializeChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    assert subprocs != null : "expected subprocedures";<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>      if (subproc == null) {<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>          new IllegalArgumentIOException(msg)));<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>        return null;<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>      }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span><a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      subproc.setRootProcId(rootProcId);<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      subproc.setProcId(nextProcId());<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      procStack.addSubProcedure(subproc);<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>    }<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span><a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>    if (!procedure.isFailed()) {<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>      switch (procedure.getState()) {<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>        case RUNNABLE:<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>          break;<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        case WAITING_TIMEOUT:<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>          timeoutExecutor.add(procedure);<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>          break;<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>        default:<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          break;<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>      }<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>    }<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    return subprocs;<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>  }<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span><a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>  private void submitChildrenProcedures(Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>      subproc.updateMetricsOnSubmit(getEnvironment());<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>      scheduler.addFront(subproc);<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    }<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>  }<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span><a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>  private void countDownChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    Procedure&lt;TEnvironment&gt; parent = procedures.get(procedure.getParentProcId());<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    if (parent == null) {<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>      assert procStack.isRollingback();<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>      return;<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    }<a name="line.1663"></a>
 <span class="sourceLineNo">1664</span><a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>  private void countDownChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>    Procedure&lt;TEnvironment&gt; parent = procedures.get(procedure.getParentProcId());<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    if (parent == null) {<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      assert procStack.isRollingback();<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>      return;<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>    }<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span><a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>    // If this procedure is the last child awake the parent procedure<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>    if (parent.tryRunnable()) {<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>      // If we succeeded in making the parent runnable -- i.e. all of its<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      // children have completed, move parent to front of the queue.<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      store.update(parent);<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      scheduler.addFront(parent);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      LOG.info("Finished subprocedure(s) of " + parent + "; resume parent processing.");<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>      return;<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>    }<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>  }<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span><a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>  private void updateStoreOnExec(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>      if (LOG.isTraceEnabled()) {<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>      }<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      store.insert(procedure, subprocs);<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>    } else {<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      LOG.trace("Store update {}", procedure);<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>        // remove child procedures<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        if (childProcIds != null) {<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>          store.delete(procedure, childProcIds);<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>            procedures.remove(childProcIds[i]);<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>          }<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>        } else {<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>          store.update(procedure);<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      } else {<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        store.update(procedure);<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>      }<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>    }<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>  }<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span><a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>  private void handleInterruptedException(Procedure&lt;TEnvironment&gt; proc, InterruptedException e) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>    LOG.trace("Interrupt during {}. suspend and retry it later.", proc, e);<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>    // and the executor/store will be stopped.<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>  }<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span><a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>  private void execCompletionCleanup(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    final TEnvironment env = getEnvironment();<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>    if (proc.hasLock()) {<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>      LOG.warn("Usually this should not happen, we will release the lock before if the procedure" +<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>        " is finished, even if the holdLock is true, arrive here means we have some holes where" +<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        " we do not release the lock. And the releaseLock below may fail since the procedure may" +<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>        " have already been deleted from the procedure store.");<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>      releaseLock(proc, true);<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>    }<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>    try {<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>      proc.completionCleanup(env);<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>    } catch (Throwable e) {<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>    }<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>  }<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span><a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>  private void procedureFinished(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>    // call the procedure completion cleanup handler<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>    execCompletionCleanup(proc);<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span><a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>    CompletedProcedureRetainer&lt;TEnvironment&gt; retainer = new CompletedProcedureRetainer&lt;&gt;(proc);<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span><a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>    // update the executor internal state maps<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>      retainer.setClientAckTime(0);<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>    }<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span><a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>    completed.put(proc.getProcId(), retainer);<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>    rollbackStack.remove(proc.getProcId());<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    procedures.remove(proc.getProcId());<a name="line.1749"></a>
+<span class="sourceLineNo">1665</span>    // If this procedure is the last child awake the parent procedure<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>    if (parent.tryRunnable()) {<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>      // If we succeeded in making the parent runnable -- i.e. all of its<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      // children have completed, move parent to front of the queue.<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>      store.update(parent);<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>      scheduler.addFront(parent);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      LOG.info("Finished subprocedure(s) of " + parent + "; resume parent processing.");<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>      return;<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>    }<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>  }<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span><a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>  private void updateStoreOnExec(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      if (LOG.isTraceEnabled()) {<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>      }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      store.insert(procedure, subprocs);<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>    } else {<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      LOG.trace("Store update {}", procedure);<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>        // remove child procedures<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>        if (childProcIds != null) {<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>          store.delete(procedure, childProcIds);<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>            procedures.remove(childProcIds[i]);<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>          }<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>        } else {<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>          store.update(procedure);<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>        }<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>      } else {<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>        store.update(procedure);<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      }<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>    }<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>  }<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span><a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>  private void handleInterruptedException(Procedure&lt;TEnvironment&gt; proc, InterruptedException e) {<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>    LOG.trace("Interrupt during {}. suspend and retry it later.", proc, e);<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>    // and the executor/store will be stopped.<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>  }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span><a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  private void execCompletionCleanup(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>    final TEnvironment env = getEnvironment();<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>    if (proc.hasLock()) {<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      LOG.warn("Usually this should not happen, we will release the lock before if the procedure" +<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>        " is finished, even if the holdLock is true, arrive here means we have some holes where" +<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        " we do not release the lock. And the releaseLock below may fail since the procedure may" +<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        " have already been deleted from the procedure store.");<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      releaseLock(proc, true);<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>    }<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>    try {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>      proc.completionCleanup(env);<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>    } catch (Throwable e) {<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>    }<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>  }<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span><a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>  private void procedureFinished(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    // call the procedure completion cleanup handler<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>    execCompletionCleanup(proc);<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span><a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>    CompletedProcedureRetainer&lt;TEnvironment&gt; retainer = new CompletedProcedureRetainer&lt;&gt;(proc);<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span><a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>    // update the executor internal state maps<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>      retainer.setClientAckTime(0);<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>    }<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span><a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>    completed.put(proc.getProcId(), retainer);<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>    rollbackStack.remove(proc.getProcId());<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>    procedures.remove(proc.getProcId());<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span><a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>    // call the runnableSet completion cleanup handler<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>    try {<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>      scheduler.completionCleanup(proc);<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>    } catch (Throwable e) {<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: {}", proc, e);<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
 <span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    // call the runnableSet completion cleanup handler<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    try {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      scheduler.completionCleanup(proc);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>    } catch (Throwable e) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: {}", proc, e);<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>    }<a name="line.1757"></a>
+<span class="sourceLineNo">1751</span>    // Notify the listeners<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>  }<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span><a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>  RootProcedureState&lt;TEnvironment&gt; getProcStack(long rootProcId) {<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    return rollbackStack.get(rootProcId);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>  }<a name="line.1757"></a>
 <span class="sourceLineNo">1758</span><a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>    // Notify the listeners<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span><a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>  RootProcedureState&lt;TEnvironment&gt; getProcStack(long rootProcId) {<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>    return rollbackStack.get(rootProcId);<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  }<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>  // ==========================================================================<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>  //  Worker Thread<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>  // ==========================================================================<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>  private class WorkerThread extends StoppableThread {<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    private volatile Procedure&lt;TEnvironment&gt; activeProcedure;<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    public WorkerThread(ThreadGroup group) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      this(group, "PEWorker-");<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    }<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span><a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    protected WorkerThread(ThreadGroup group, String prefix) {<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>      super(group, prefix + workerId.incrementAndGet());<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>      setDaemon(true);<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span><a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>    @Override<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    public void sendStopSignal() {<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      scheduler.signalAll();<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    }<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span><a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>    @Override<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>    public void run() {<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      try {<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>        while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>          Procedure&lt;TEnvironment&gt; proc = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>          if (proc == null) {<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>            continue;<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>          }<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>          this.activeProcedure = proc;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>          int activeCount = activeExecutorCount.incrementAndGet();<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>          int runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>          LOG.trace("Execute pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>            runningCount, activeCount);<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>          executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>          IdLock.Entry lockEntry = procExecutionLock.getLockEntry(proc.getProcId());<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>          try {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>            executeProcedure(proc);<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>          } catch (AssertionError e) {<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            LOG.info("ASSERT pid=" + proc.getProcId(), e);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            throw e;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          } finally {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>            procExecutionLock.releaseLockEntry(lockEntry);<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>            activeCount = activeExecutorCount.decrementAndGet();<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>            runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>            LOG.trace("Halt pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>              runningCount, activeCount);<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>            this.activeProcedure = null;<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>            lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>            executionStartTime.set(Long.MAX_VALUE);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>          }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>        }<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>      } catch (Throwable t) {<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        LOG.warn("Worker terminating UNNATURALLY {}", this.activeProcedure, t);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>      } finally {<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        LOG.trace("Worker terminated.");<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>      }<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>      workerThreads.remove(this);<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    }<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    @Override<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    public String toString() {<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      Procedure&lt;?&gt; p = this.activeProcedure;<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>      return getName() + "(pid=" + (p == null? Procedure.NO_PROC_ID: p.getProcId() + ")");<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>    }<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span><a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    /**<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>     * @return the time since the current procedure is running<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>     */<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    public long getCurrentRunTime() {<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>    }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span><a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    // core worker never timeout<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>      return true;<a name="line.1843"></a>
-<span class="s

<TRUNCATED>

[22/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 38f7cc7..f55f5e6 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.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/org/apache/hadoop/hbase/class-use/HTableDescriptor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/HTableDescriptor.html b/devapidocs/org/apache/hadoop/hbase/class-use/HTableDescriptor.html
index 0ff5e5f..717b46a 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/HTableDescriptor.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/HTableDescriptor.html
@@ -269,6 +269,18 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
+<td class="colLast"><span class="typeNameLabel">HTableDescriptor.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setNormalizerTargetRegionCount-int-">setNormalizerTargetRegionCount</a></span>(int&nbsp;regionCount)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
+<td class="colLast"><span class="typeNameLabel">HTableDescriptor.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setNormalizerTargetRegionSize-long-">setNormalizerTargetRegionSize</a></span>(long&nbsp;regionSize)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><span class="typeNameLabel">HTableDescriptor.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setOwner-org.apache.hadoop.hbase.security.User-">setOwner</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;owner)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/org/apache/hadoop/hbase/client/ImmutableHTableDescriptor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/ImmutableHTableDescriptor.html b/devapidocs/org/apache/hadoop/hbase/client/ImmutableHTableDescriptor.html
index 0c03788..624021d 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/ImmutableHTableDescriptor.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/ImmutableHTableDescriptor.html
@@ -141,7 +141,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" t
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#COMPACTION_ENABLED">COMPACTION_ENABLED</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#DEFAULT_COMPACTION_ENABLED">DEFAULT_COMPACTION_ENABLED</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#DEFAULT_MEMSTORE_FLUSH_SIZE">DEFAULT_MEMSTORE_FLUSH_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#DEFAULT_NORMALIZATION_ENABLED">DEFAULT_NORMALIZATION_ENABLED</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#DEFAULT_READONLY">DEFAULT_READONLY</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#DEFAULT_REGION_MEMSTORE_REPLICATION">DEFAULT_REGION_MEMSTORE_REPLICATION</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#DEFAULT_REGION_REPLICATION">DEFAULT_REGION_REPLICATION</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#delegatee">delegatee<
 /a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#DURABILITY">DURABILITY</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#FLUSH_POLICY">FLUSH_POLICY</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#IS_META">IS_META</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#IS_ROOT">IS_ROOT</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#MAX_FILESIZE">MAX_FILESIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#MEMSTORE_FLUSHSIZE">MEMSTORE_FLUSHSIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#NAMESPACE_COL_DESC_BYTES">NAMESPACE_COL_DESC_BYTES</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#NAMESPACE_FAMILY_INFO">NAMESPACE_FAMILY_INFO</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#NAMESPACE_FAMILY_INFO_BYTES">NAMESPACE_FAMILY_INFO_BYTES</a>, <a href="../..
 /../../../org/apache/hadoop/hbase/HTableDescriptor.html#NAMESPACE_TABLEDESC">NAMESPACE_TABLEDESC</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#NORMALIZATION_ENABLED">NORMALIZATION_ENABLED</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#OWNER">OWNER</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#OWNER_KEY">OWNER_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#PRIORITY">PRIORITY</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#READONLY">READONLY</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#REGION_MEMSTORE_REPLICATION">REGION_MEMSTORE_REPLICATION</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#REGION_REPLICATION">REGION_REPLICATION</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#SPLIT_POLICY">SPLIT_POLICY</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#COMPACTION_ENABLED">COMPACTION_ENABLED</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#DEFAULT_COMPACTION_ENABLED">DEFAULT_COMPACTION_ENABLED</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#DEFAULT_MEMSTORE_FLUSH_SIZE">DEFAULT_MEMSTORE_FLUSH_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#DEFAULT_NORMALIZATION_ENABLED">DEFAULT_NORMALIZATION_ENABLED</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#DEFAULT_READONLY">DEFAULT_READONLY</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#DEFAULT_REGION_MEMSTORE_REPLICATION">DEFAULT_REGION_MEMSTORE_REPLICATION</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#DEFAULT_REGION_REPLICATION">DEFAULT_REGION_REPLICATION</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#delegatee">delegatee<
 /a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#DURABILITY">DURABILITY</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#FLUSH_POLICY">FLUSH_POLICY</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#IS_META">IS_META</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#IS_ROOT">IS_ROOT</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#MAX_FILESIZE">MAX_FILESIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#MEMSTORE_FLUSHSIZE">MEMSTORE_FLUSHSIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#NAMESPACE_COL_DESC_BYTES">NAMESPACE_COL_DESC_BYTES</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#NAMESPACE_FAMILY_INFO">NAMESPACE_FAMILY_INFO</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#NAMESPACE_FAMILY_INFO_BYTES">NAMESPACE_FAMILY_INFO_BYTES</a>, <a href="../..
 /../../../org/apache/hadoop/hbase/HTableDescriptor.html#NAMESPACE_TABLEDESC">NAMESPACE_TABLEDESC</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#NORMALIZATION_ENABLED">NORMALIZATION_ENABLED</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#NORMALIZER_TARGET_REGION_COUNT">NORMALIZER_TARGET_REGION_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#NORMALIZER_TARGET_REGION_SIZE">NORMALIZER_TARGET_REGION_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#OWNER">OWNER</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#OWNER_KEY">OWNER_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#PRIORITY">PRIORITY</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#READONLY">READONLY</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#REGION_MEMSTORE_REPLICATION">REGION_MEMSTORE_REPLICATION</a
 >, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#REGION_REPLICATION">REGION_REPLICATION</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#SPLIT_POLICY">SPLIT_POLICY</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.client.TableDescriptor">
@@ -207,7 +207,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" t
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#addCoprocessor-java.lang.String-">addCoprocessor</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#addCoprocessor-java.lang.String-org.apache.hadoop.fs.Path-int-java.util.Map-">addCoprocessor</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#addCoprocessorWithSpec-java.lang.String-">addCoprocessorWithSpec</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#addFamily-org.apache.hadoop.hbase.HColumnDescriptor-">addFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#compareTo-org.apache.hadoop.hbase.HTableDescriptor-">compareTo</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#equals-java.lang.Object-">equals</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getColumnFamilies--">getColumnFamilies</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescri
 ptor.html#getColumnFamily-byte:A-">getColumnFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getColumnFamilyCount--">getColumnFamilyCount</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getColumnFamilyNames--">getColumnFamilyNames</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getConfiguration--">getConfiguration</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getConfigurationValue-java.lang.String-">getConfigurationValue</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getCoprocessorDescriptors--">getCoprocessorDescriptors</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getCoprocessors--">getCoprocessors</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getDurability--">getDurability</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getFamilies--">getFamilies</a>, <a 
 href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getFamiliesKeys--">getFamiliesKeys</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getFamily-byte:A-">getFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getFlushPolicyClassName--">getFlushPolicyClassName</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getMaxFileSize--">getMaxFileSize</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getMemStoreFlushSize--">getMemStoreFlushSize</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getNameAsString--">getNameAsString</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getOwnerString--">getOwnerString</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getPriority--">getPriority</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getRegionReplication--">getRegionReplicati
 on</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getRegionSplitPolicyClassName--">getRegionSplitPolicyClassName</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getTableName--">getTableName</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getValue-byte:A-">getValue</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getValue-org.apache.hadoop.hbase.util.Bytes-">getValue</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getValue-java.lang.String-">getValue</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getValues--">getValues</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#hasColumnFamily-byte:A-">hasColumnFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#hasCoprocessor-java.lang.String-">hasCoprocessor</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.
 html#hasFamily-byte:A-">hasFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#hashCode--">hashCode</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#hasRegionMemstoreReplication--">hasRegionMemstoreReplication</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#hasRegionMemStoreReplication--">hasRegionMemStoreReplication</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#isCompactionEnabled--">isCompactionEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#isMetaRegion--">isMetaRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#isMetaTable--">isMetaTable</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#isNormalizationEnabled--">isNormalizationEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#isReadOnly--">isReadOnly</a>, <a href="../../../../../org/apache/hadoop/
 hbase/HTableDescriptor.html#isRootRegion--">isRootRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#modifyFamily-org.apache.hadoop.hbase.HColumnDescriptor-">modifyFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#parseFrom-byte:A-">parseFrom</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#remove-byte:A-">remove</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#remove-org.apache.hadoop.hbase.util.Bytes-">remove</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#remove-java.lang.String-">remove</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#removeConfiguration-java.lang.String-">removeConfiguration</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#removeCoprocessor-java.lang.String-">removeCoprocessor</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#removeFamily-byte:A-
 ">removeFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setCompactionEnabled-boolean-">setCompactionEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setConfiguration-java.lang.String-java.lang.String-">setConfiguration</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setDurability-org.apache.hadoop.hbase.client.Durability-">setDurability</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setFlushPolicyClassName-java.lang.String-">setFlushPolicyClassName</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setMaxFileSize-long-">setMaxFileSize</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setMemStoreFlushSize-long-">setMemStoreFlushSize</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setNormalizationEnabled-boolean-">setNormalizationEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase
 /HTableDescriptor.html#setOwner-org.apache.hadoop.hbase.security.User-">setOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setOwnerString-java.lang.String-">setOwnerString</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setPriority-int-">setPriority</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setReadOnly-boolean-">setReadOnly</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setRegionMemstoreReplication-boolean-">setRegionMemstoreReplication</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setRegionMemStoreReplication-boolean-">setRegionMemStoreReplication</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setRegionReplication-int-">setRegionReplication</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setRegionSplitPolicyClassName-java.lang.String-">setRegionSplitPolicyClassName</a>, <a href=".
 ./../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setValue-byte:A-byte:A-">setValue</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setValue-org.apache.hadoop.hbase.util.Bytes-org.apache.hadoop.hbase.util.Bytes-">setValue</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setValue-java.lang.String-java.lang.String-">setValue</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#toByteArray--">toByteArray</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#toString--">toString</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#toStringCustomizedValues--">toStringCustomizedValues</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#toStringTableAttributes--">toStringTableAttributes</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#addCoprocessor-java.lang.String-">addCoprocessor</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#addCoprocessor-java.lang.String-org.apache.hadoop.fs.Path-int-java.util.Map-">addCoprocessor</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#addCoprocessorWithSpec-java.lang.String-">addCoprocessorWithSpec</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#addFamily-org.apache.hadoop.hbase.HColumnDescriptor-">addFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#compareTo-org.apache.hadoop.hbase.HTableDescriptor-">compareTo</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#equals-java.lang.Object-">equals</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getColumnFamilies--">getColumnFamilies</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescri
 ptor.html#getColumnFamily-byte:A-">getColumnFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getColumnFamilyCount--">getColumnFamilyCount</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getColumnFamilyNames--">getColumnFamilyNames</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getConfiguration--">getConfiguration</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getConfigurationValue-java.lang.String-">getConfigurationValue</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getCoprocessorDescriptors--">getCoprocessorDescriptors</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getCoprocessors--">getCoprocessors</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getDurability--">getDurability</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getFamilies--">getFamilies</a>, <a 
 href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getFamiliesKeys--">getFamiliesKeys</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getFamily-byte:A-">getFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getFlushPolicyClassName--">getFlushPolicyClassName</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getMaxFileSize--">getMaxFileSize</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getMemStoreFlushSize--">getMemStoreFlushSize</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getNameAsString--">getNameAsString</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getNormalizerTargetRegionCount--">getNormalizerTargetRegionCount</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getNormalizerTargetRegionSize--">getNormalizerTargetRegionSize</a>, <a href="../../../../../org/apache/hadoop/hb
 ase/HTableDescriptor.html#getOwnerString--">getOwnerString</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getPriority--">getPriority</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getRegionReplication--">getRegionReplication</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getRegionSplitPolicyClassName--">getRegionSplitPolicyClassName</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getTableName--">getTableName</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getValue-byte:A-">getValue</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getValue-org.apache.hadoop.hbase.util.Bytes-">getValue</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getValue-java.lang.String-">getValue</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#getValues--">getValues</a>, <a href="../../../../../org
 /apache/hadoop/hbase/HTableDescriptor.html#hasColumnFamily-byte:A-">hasColumnFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#hasCoprocessor-java.lang.String-">hasCoprocessor</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#hasFamily-byte:A-">hasFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#hashCode--">hashCode</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#hasRegionMemstoreReplication--">hasRegionMemstoreReplication</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#hasRegionMemStoreReplication--">hasRegionMemStoreReplication</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#isCompactionEnabled--">isCompactionEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#isMetaRegion--">isMetaRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#isMetaTable--">isMet
 aTable</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#isNormalizationEnabled--">isNormalizationEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#isReadOnly--">isReadOnly</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#isRootRegion--">isRootRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#modifyFamily-org.apache.hadoop.hbase.HColumnDescriptor-">modifyFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#parseFrom-byte:A-">parseFrom</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#remove-byte:A-">remove</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#remove-org.apache.hadoop.hbase.util.Bytes-">remove</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#remove-java.lang.String-">remove</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#remove
 Configuration-java.lang.String-">removeConfiguration</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#removeCoprocessor-java.lang.String-">removeCoprocessor</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#removeFamily-byte:A-">removeFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setCompactionEnabled-boolean-">setCompactionEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setConfiguration-java.lang.String-java.lang.String-">setConfiguration</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setDurability-org.apache.hadoop.hbase.client.Durability-">setDurability</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setFlushPolicyClassName-java.lang.String-">setFlushPolicyClassName</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setMaxFileSize-long-">setMaxFileSize</a>, <a href="../../../../../or
 g/apache/hadoop/hbase/HTableDescriptor.html#setMemStoreFlushSize-long-">setMemStoreFlushSize</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setNormalizationEnabled-boolean-">setNormalizationEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setNormalizerTargetRegionCount-int-">setNormalizerTargetRegionCount</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setNormalizerTargetRegionSize-long-">setNormalizerTargetRegionSize</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setOwner-org.apache.hadoop.hbase.security.User-">setOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setOwnerString-java.lang.String-">setOwnerString</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setPriority-int-">setPriority</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setReadOnly-boolean-">setReadOnly</a>, <a href=".
 ./../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setRegionMemstoreReplication-boolean-">setRegionMemstoreReplication</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setRegionMemStoreReplication-boolean-">setRegionMemStoreReplication</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setRegionReplication-int-">setRegionReplication</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setRegionSplitPolicyClassName-java.lang.String-">setRegionSplitPolicyClassName</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setValue-byte:A-byte:A-">setValue</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setValue-org.apache.hadoop.hbase.util.Bytes-org.apache.hadoop.hbase.util.Bytes-">setValue</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#setValue-java.lang.String-java.lang.String-">setValue</a>, <a href="../../../../../org/apache/hadoop
 /hbase/HTableDescriptor.html#toByteArray--">toByteArray</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#toString--">toString</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#toStringCustomizedValues--">toStringCustomizedValues</a>, <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html#toStringTableAttributes--">toStringTableAttributes</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/org/apache/hadoop/hbase/client/TableDescriptor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/TableDescriptor.html b/devapidocs/org/apache/hadoop/hbase/client/TableDescriptor.html
index 373c742..e5b7958 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/TableDescriptor.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/TableDescriptor.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":17,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":38,"i11":6,"i12":6,"i13":6,"i14":6,"i15":6,"i16":6,"i17":6,"i18":6,"i19":6,"i20":6,"i21":18,"i22":6,"i23":6,"i24":6,"i25":6,"i26":6,"i27":6,"i28":18};
+var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":17,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":38,"i13":6,"i14":6,"i15":6,"i16":6,"i17":6,"i18":6,"i19":6,"i20":6,"i21":6,"i22":6,"i23":18,"i24":6,"i25":6,"i26":6,"i27":6,"i28":6,"i29":6,"i30":18};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],16:["t5","Default Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -216,109 +216,121 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 </td>
 </tr>
 <tr id="i10" class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getNormalizerTargetRegionCount--">getNormalizerTargetRegionCount</a></span>()</code>
+<div class="block">Check if there is the target region count.</div>
+</td>
+</tr>
+<tr id="i11" class="rowColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getNormalizerTargetRegionSize--">getNormalizerTargetRegionSize</a></span>()</code>
+<div class="block">Check if there is the target region size.</div>
+</td>
+</tr>
+<tr id="i12" class="altColor">
 <td class="colFirst"><code><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 class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getOwnerString--">getOwnerString</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getPriority--">getPriority</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getRegionReplication--">getRegionReplication</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code><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 class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getRegionSplitPolicyClassName--">getRegionSplitPolicyClassName</a></span>()</code>
 <div class="block">This gets the class associated with the region split policy which
  determines when a region split should occur.</div>
 </td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getTableName--">getTableName</a></span>()</code>
 <div class="block">Get the name of the table</div>
 </td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getValue-byte:A-">getValue</a></span>(byte[]&nbsp;key)</code>
 <div class="block">Getter for accessing the metadata associated with the key.</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getValue-org.apache.hadoop.hbase.util.Bytes-">getValue</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key)</code>
 <div class="block">Getter for accessing the metadata associated with the key.</div>
 </td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code><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 class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getValue-java.lang.String-">getValue</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</code>
 <div class="block">Getter for accessing the metadata associated with the key.</div>
 </td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>,<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getValues--">getValues</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#hasColumnFamily-byte:A-">hasColumnFamily</a></span>(byte[]&nbsp;name)</code>
 <div class="block">Checks to see if this table contains the given column family</div>
 </td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#hasCoprocessor-java.lang.String-">hasCoprocessor</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;classNameToMatch)</code>
 <div class="block">Check if the table has an attached co-processor represented by the name
  className</div>
 </td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code>default boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#hasGlobalReplicationScope--">hasGlobalReplicationScope</a></span>()</code>
 <div class="block">Check if any of the table's cfs' replication scope are set to
  <a href="../../../../../org/apache/hadoop/hbase/HConstants.html#REPLICATION_SCOPE_GLOBAL"><code>HConstants.REPLICATION_SCOPE_GLOBAL</code></a>.</div>
 </td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#hasRegionMemStoreReplication--">hasRegionMemStoreReplication</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#isCompactionEnabled--">isCompactionEnabled</a></span>()</code>
 <div class="block">Check if the compaction enable flag of the table is true.</div>
 </td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#isMetaRegion--">isMetaRegion</a></span>()</code>
 <div class="block">Checks if this table is <code> hbase:meta </code> region.</div>
 </td>
 </tr>
-<tr id="i25" class="rowColor">
+<tr id="i27" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#isMetaTable--">isMetaTable</a></span>()</code>
 <div class="block">Checks if the table is a <code>hbase:meta</code> table</div>
 </td>
 </tr>
-<tr id="i26" class="altColor">
+<tr id="i28" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#isNormalizationEnabled--">isNormalizationEnabled</a></span>()</code>
 <div class="block">Check if normalization enable flag of the table is true.</div>
 </td>
 </tr>
-<tr id="i27" class="rowColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#isReadOnly--">isReadOnly</a></span>()</code>
 <div class="block">Check if the readOnly flag of the table is set.</div>
 </td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code>default boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#matchReplicationScope-boolean-">matchReplicationScope</a></span>(boolean&nbsp;enabled)</code>
 <div class="block">Check if the table's cfs' replication scope matched with the replication state</div>
@@ -746,13 +758,43 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/C
 </dl>
 </li>
 </ul>
+<a name="getNormalizerTargetRegionCount--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getNormalizerTargetRegionCount</h4>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptor.html#line.269">getNormalizerTargetRegionCount</a>()</pre>
+<div class="block">Check if there is the target region count. If so, the normalize plan will
+ be calculated based on the target region count.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>target region count after normalize done</dd>
+</dl>
+</li>
+</ul>
+<a name="getNormalizerTargetRegionSize--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getNormalizerTargetRegionSize</h4>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptor.html#line.277">getNormalizerTargetRegionSize</a>()</pre>
+<div class="block">Check if there is the target region size. If so, the normalize plan will
+ be calculated based on the target region size.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>target region size after normalize done</dd>
+</dl>
+</li>
+</ul>
 <a name="isReadOnly--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>isReadOnly</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptor.html#line.269">isReadOnly</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptor.html#line.285">isReadOnly</a>()</pre>
 <div class="block">Check if the readOnly flag of the table is set. If the readOnly flag is set
  then the contents of the table can only be read from but not modified.</div>
 <dl>
@@ -767,7 +809,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/C
 <ul class="blockList">
 <li class="blockList">
 <h4>hasGlobalReplicationScope</h4>
-<pre>default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptor.html#line.276">hasGlobalReplicationScope</a>()</pre>
+<pre>default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptor.html#line.292">hasGlobalReplicationScope</a>()</pre>
 <div class="block">Check if any of the table's cfs' replication scope are set to
  <a href="../../../../../org/apache/hadoop/hbase/HConstants.html#REPLICATION_SCOPE_GLOBAL"><code>HConstants.REPLICATION_SCOPE_GLOBAL</code></a>.</div>
 <dl>
@@ -782,7 +824,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/C
 <ul class="blockListLast">
 <li class="blockList">
 <h4>matchReplicationScope</h4>
-<pre>default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptor.html#line.286">matchReplicationScope</a>(boolean&nbsp;enabled)</pre>
+<pre>default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptor.html#line.302">matchReplicationScope</a>(boolean&nbsp;enabled)</pre>
 <div class="block">Check if the table's cfs' replication scope matched with the replication state</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>


[20/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html b/devapidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
index 657153c..e299293 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":9,"i2":9,"i3":10,"i4":9,"i5":9,"i6":9,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":42,"i23":42,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":9,"i34":9};
+var methods = {"i0":10,"i1":9,"i2":9,"i3":10,"i4":9,"i5":9,"i6":9,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":42,"i25":42,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":9,"i36":9};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -332,6 +332,22 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <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 class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#NORMALIZER_TARGET_REGION_COUNT">NORMALIZER_TARGET_REGION_COUNT</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#NORMALIZER_TARGET_REGION_COUNT_KEY">NORMALIZER_TARGET_REGION_COUNT_KEY</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <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 class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#NORMALIZER_TARGET_REGION_SIZE">NORMALIZER_TARGET_REGION_SIZE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#NORMALIZER_TARGET_REGION_SIZE_KEY">NORMALIZER_TARGET_REGION_SIZE_KEY</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <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 class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#OWNER">OWNER</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
@@ -527,62 +543,70 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr id="i22" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setNormalizerTargetRegionCount-int-">setNormalizerTargetRegionCount</a></span>(int&nbsp;regionCount)</code>&nbsp;</td>
+</tr>
+<tr id="i23" class="rowColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setNormalizerTargetRegionSize-long-">setNormalizerTargetRegionSize</a></span>(long&nbsp;regionSize)</code>&nbsp;</td>
+</tr>
+<tr id="i24" class="altColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setOwner-org.apache.hadoop.hbase.security.User-">setOwner</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;owner)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setOwnerString-java.lang.String-">setOwnerString</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;ownerString)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setPriority-int-">setPriority</a></span>(int&nbsp;priority)</code>&nbsp;</td>
 </tr>
-<tr id="i25" class="rowColor">
+<tr id="i27" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setReadOnly-boolean-">setReadOnly</a></span>(boolean&nbsp;readOnly)</code>&nbsp;</td>
 </tr>
-<tr id="i26" class="altColor">
+<tr id="i28" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setRegionMemStoreReplication-boolean-">setRegionMemStoreReplication</a></span>(boolean&nbsp;memstoreReplication)</code>&nbsp;</td>
 </tr>
-<tr id="i27" class="rowColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setRegionReplication-int-">setRegionReplication</a></span>(int&nbsp;regionReplication)</code>&nbsp;</td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setRegionSplitPolicyClassName-java.lang.String-">setRegionSplitPolicyClassName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;clazz)</code>&nbsp;</td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setReplicationScope-int-">setReplicationScope</a></span>(int&nbsp;scope)</code>
 <div class="block">Sets replication scope all & only the columns already in the builder.</div>
 </td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setValue-byte:A-byte:A-">setValue</a></span>(byte[]&nbsp;key,
         byte[]&nbsp;value)</code>&nbsp;</td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setValue-org.apache.hadoop.hbase.util.Bytes-org.apache.hadoop.hbase.util.Bytes-">setValue</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key,
         <a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;value)</code>&nbsp;</td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setValue-java.lang.String-java.lang.String-">setValue</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key,
         <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;value)</code>&nbsp;</td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#toByteArray-org.apache.hadoop.hbase.client.TableDescriptor-">toByteArray</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</code>&nbsp;</td>
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CoprocessorDescriptor.html" title="interface in org.apache.hadoop.hbase.client">CoprocessorDescriptor</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#toCoprocessorDescriptor-java.lang.String-">toCoprocessorDescriptor</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;spec)</code>&nbsp;</td>
 </tr>
@@ -922,13 +946,59 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.150">NORMALIZATION_ENABLED_KEY</a></pre>
 </li>
 </ul>
+<a name="NORMALIZER_TARGET_REGION_COUNT">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>NORMALIZER_TARGET_REGION_COUNT</h4>
+<pre>@InterfaceAudience.Private
+public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.154">NORMALIZER_TARGET_REGION_COUNT</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.TableDescriptorBuilder.NORMALIZER_TARGET_REGION_COUNT">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="NORMALIZER_TARGET_REGION_COUNT_KEY">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>NORMALIZER_TARGET_REGION_COUNT_KEY</h4>
+<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.156">NORMALIZER_TARGET_REGION_COUNT_KEY</a></pre>
+</li>
+</ul>
+<a name="NORMALIZER_TARGET_REGION_SIZE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>NORMALIZER_TARGET_REGION_SIZE</h4>
+<pre>@InterfaceAudience.Private
+public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.160">NORMALIZER_TARGET_REGION_SIZE</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.TableDescriptorBuilder.NORMALIZER_TARGET_REGION_SIZE">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="NORMALIZER_TARGET_REGION_SIZE_KEY">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>NORMALIZER_TARGET_REGION_SIZE_KEY</h4>
+<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.161">NORMALIZER_TARGET_REGION_SIZE_KEY</a></pre>
+</li>
+</ul>
 <a name="DEFAULT_DURABLITY">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_DURABLITY</h4>
-<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.157">DEFAULT_DURABLITY</a></pre>
+<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.168">DEFAULT_DURABLITY</a></pre>
 <div class="block">Default durability for HTD is USE_DEFAULT, which defaults to HBase-global
  default value</div>
 </li>
@@ -940,7 +1010,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <li class="blockList">
 <h4>PRIORITY</h4>
 <pre>@InterfaceAudience.Private
-public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.160">PRIORITY</a></pre>
+public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.171">PRIORITY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.TableDescriptorBuilder.PRIORITY">Constant Field Values</a></dd>
@@ -953,7 +1023,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>PRIORITY_KEY</h4>
-<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.161">PRIORITY_KEY</a></pre>
+<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.172">PRIORITY_KEY</a></pre>
 </li>
 </ul>
 <a name="DEFAULT_PRIORITY">
@@ -962,7 +1032,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_PRIORITY</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.167">DEFAULT_PRIORITY</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.178">DEFAULT_PRIORITY</a></pre>
 <div class="block">Relative priority of the table used for rpc scheduling</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -976,7 +1046,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_READONLY</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.172">DEFAULT_READONLY</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.183">DEFAULT_READONLY</a></pre>
 <div class="block">Constant that denotes whether the table is READONLY by default and is false</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -990,7 +1060,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_COMPACTION_ENABLED</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.177">DEFAULT_COMPACTION_ENABLED</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.188">DEFAULT_COMPACTION_ENABLED</a></pre>
 <div class="block">Constant that denotes whether the table is compaction enabled by default</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1004,7 +1074,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_NORMALIZATION_ENABLED</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.182">DEFAULT_NORMALIZATION_ENABLED</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.193">DEFAULT_NORMALIZATION_ENABLED</a></pre>
 <div class="block">Constant that denotes whether the table is normalized by default.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1018,7 +1088,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_MEMSTORE_FLUSH_SIZE</h4>
-<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.188">DEFAULT_MEMSTORE_FLUSH_SIZE</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.199">DEFAULT_MEMSTORE_FLUSH_SIZE</a></pre>
 <div class="block">Constant that denotes the maximum default size of the memstore in bytes after which
  the contents are flushed to the store files.</div>
 <dl>
@@ -1033,7 +1103,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGION_REPLICATION</h4>
-<pre>public static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.190">DEFAULT_REGION_REPLICATION</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.201">DEFAULT_REGION_REPLICATION</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.TableDescriptorBuilder.DEFAULT_REGION_REPLICATION">Constant Field Values</a></dd>
@@ -1046,7 +1116,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGION_MEMSTORE_REPLICATION</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.192">DEFAULT_REGION_MEMSTORE_REPLICATION</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.203">DEFAULT_REGION_MEMSTORE_REPLICATION</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.TableDescriptorBuilder.DEFAULT_REGION_MEMSTORE_REPLICATION">Constant Field Values</a></dd>
@@ -1059,7 +1129,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_VALUES</h4>
-<pre>private static final&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="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.194">DEFAULT_VALUES</a></pre>
+<pre>private static final&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="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.205">DEFAULT_VALUES</a></pre>
 </li>
 </ul>
 <a name="RESERVED_KEYWORDS">
@@ -1068,7 +1138,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>RESERVED_KEYWORDS</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.195">RESERVED_KEYWORDS</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.206">RESERVED_KEYWORDS</a></pre>
 </li>
 </ul>
 <a name="NAMESPACE_FAMILY_INFO">
@@ -1078,7 +1148,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <li class="blockList">
 <h4>NAMESPACE_FAMILY_INFO</h4>
 <pre>@InterfaceAudience.Private
-public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.213">NAMESPACE_FAMILY_INFO</a></pre>
+public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.224">NAMESPACE_FAMILY_INFO</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.TableDescriptorBuilder.NAMESPACE_FAMILY_INFO">Constant Field Values</a></dd>
@@ -1092,7 +1162,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <li class="blockList">
 <h4>NAMESPACE_FAMILY_INFO_BYTES</h4>
 <pre>@InterfaceAudience.Private
-public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.215">NAMESPACE_FAMILY_INFO_BYTES</a></pre>
+public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.226">NAMESPACE_FAMILY_INFO_BYTES</a></pre>
 </li>
 </ul>
 <a name="NAMESPACE_COL_DESC_BYTES">
@@ -1102,7 +1172,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <li class="blockList">
 <h4>NAMESPACE_COL_DESC_BYTES</h4>
 <pre>@InterfaceAudience.Private
-public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.217">NAMESPACE_COL_DESC_BYTES</a></pre>
+public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.228">NAMESPACE_COL_DESC_BYTES</a></pre>
 </li>
 </ul>
 <a name="CP_HTD_ATTR_VALUE_PATTERN">
@@ -1111,7 +1181,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>CP_HTD_ATTR_VALUE_PATTERN</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.227">CP_HTD_ATTR_VALUE_PATTERN</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.238">CP_HTD_ATTR_VALUE_PATTERN</a></pre>
 <div class="block"><pre>
  Pattern that matches a coprocessor specification. Form is:
  <code> &lt;coprocessor jar file location&gt; '|' &lt;class name&gt; ['|' &lt;priority&gt; ['|' &lt;arguments&gt;]]</code>
@@ -1126,7 +1196,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.230">CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.241">CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.TableDescriptorBuilder.CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN">Constant Field Values</a></dd>
@@ -1139,7 +1209,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.231">CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.242">CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.TableDescriptorBuilder.CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN">Constant Field Values</a></dd>
@@ -1152,7 +1222,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>CP_HTD_ATTR_VALUE_PARAM_PATTERN</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.232">CP_HTD_ATTR_VALUE_PARAM_PATTERN</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.243">CP_HTD_ATTR_VALUE_PARAM_PATTERN</a></pre>
 </li>
 </ul>
 <a name="CP_HTD_ATTR_KEY_PATTERN">
@@ -1161,7 +1231,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>CP_HTD_ATTR_KEY_PATTERN</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.235">CP_HTD_ATTR_KEY_PATTERN</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.246">CP_HTD_ATTR_KEY_PATTERN</a></pre>
 </li>
 </ul>
 <a name="NAMESPACE_TABLEDESC">
@@ -1170,7 +1240,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>NAMESPACE_TABLEDESC</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.243">NAMESPACE_TABLEDESC</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.254">NAMESPACE_TABLEDESC</a></pre>
 <div class="block">Table descriptor for namespace table</div>
 </li>
 </ul>
@@ -1180,7 +1250,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockListLast">
 <li class="blockList">
 <h4>desc</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.253">desc</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.264">desc</a></pre>
 </li>
 </ul>
 </li>
@@ -1197,7 +1267,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>TableDescriptorBuilder</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.297">TableDescriptorBuilder</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name)</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.308">TableDescriptorBuilder</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name)</pre>
 </li>
 </ul>
 <a name="TableDescriptorBuilder-org.apache.hadoop.hbase.client.TableDescriptor-">
@@ -1206,7 +1276,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TableDescriptorBuilder</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.301">TableDescriptorBuilder</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.312">TableDescriptorBuilder</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
 </li>
 </ul>
 </li>
@@ -1223,7 +1293,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>toByteArray</h4>
-<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.259">toByteArray</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
+<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.270">toByteArray</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>desc</code> - The table descriptor to serialize</dd>
@@ -1238,7 +1308,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>parseFrom</h4>
-<pre>public static&nbsp;<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/client/TableDescriptorBuilder.html#line.272">parseFrom</a>(byte[]&nbsp;pbBytes)
+<pre>public static&nbsp;<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/client/TableDescriptorBuilder.html#line.283">parseFrom</a>(byte[]&nbsp;pbBytes)
                                  throws <a href="../../../../../org/apache/hadoop/hbase/exceptions/DeserializationException.html" title="class in org.apache.hadoop.hbase.exceptions">DeserializationException</a></pre>
 <div class="block">The input should be created by <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#toByteArray-org.apache.hadoop.hbase.client.TableDescriptor-"><code>toByteArray(org.apache.hadoop.hbase.client.TableDescriptor)</code></a>.</div>
 <dl>
@@ -1257,7 +1327,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>newBuilder</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.276">newBuilder</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.287">newBuilder</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name)</pre>
 </li>
 </ul>
 <a name="copy-org.apache.hadoop.hbase.client.TableDescriptor-">
@@ -1266,7 +1336,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>copy</h4>
-<pre>public static&nbsp;<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/client/TableDescriptorBuilder.html#line.280">copy</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
+<pre>public static&nbsp;<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/client/TableDescriptorBuilder.html#line.291">copy</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
 </li>
 </ul>
 <a name="copy-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableDescriptor-">
@@ -1275,7 +1345,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>copy</h4>
-<pre>public static&nbsp;<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/client/TableDescriptorBuilder.html#line.284">copy</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name,
+<pre>public static&nbsp;<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/client/TableDescriptorBuilder.html#line.295">copy</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;name,
                                    <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
 </li>
 </ul>
@@ -1285,7 +1355,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>newBuilder</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.293">newBuilder</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.304">newBuilder</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
 <div class="block">Copy all values, families, and name from the input.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1301,7 +1371,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>setCoprocessor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.305">setCoprocessor</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;className)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.316">setCoprocessor</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;className)
                                       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>
@@ -1315,7 +1385,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>setCoprocessor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.309">setCoprocessor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/CoprocessorDescriptor.html" title="interface in org.apache.hadoop.hbase.client">CoprocessorDescriptor</a>&nbsp;cpDesc)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.320">setCoprocessor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/CoprocessorDescriptor.html" title="interface in org.apache.hadoop.hbase.client">CoprocessorDescriptor</a>&nbsp;cpDesc)
                                       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>
@@ -1329,7 +1399,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>setCoprocessors</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.314">setCoprocessors</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/client/CoprocessorDescriptor.html" title="interface in org.apache.hadoop.hbase.client">CoprocessorDescriptor</a>&gt;&nbsp;cpDescs)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.325">setCoprocessors</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/client/CoprocessorDescriptor.html" title="interface in org.apache.hadoop.hbase.client">CoprocessorDescriptor</a>&gt;&nbsp;cpDescs)
                                        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>
@@ -1343,7 +1413,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>setColumnFamily</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.322">setColumnFamily</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;family)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.333">setColumnFamily</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;family)</pre>
 </li>
 </ul>
 <a name="setColumnFamilies-java.util.Collection-">
@@ -1352,7 +1422,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>setColumnFamilies</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.327">setColumnFamilies</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/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&gt;&nbsp;families)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.338">setColumnFamilies</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/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&gt;&nbsp;families)</pre>
 </li>
 </ul>
 <a name="modifyColumnFamily-org.apache.hadoop.hbase.client.ColumnFamilyDescriptor-">
@@ -1361,7 +1431,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>modifyColumnFamily</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.333">modifyColumnFamily</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;family)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.344">modifyColumnFamily</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;family)</pre>
 </li>
 </ul>
 <a name="removeValue-org.apache.hadoop.hbase.util.Bytes-">
@@ -1370,7 +1440,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>removeValue</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.338">removeValue</a>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.349">removeValue</a>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key)</pre>
 </li>
 </ul>
 <a name="removeValue-byte:A-">
@@ -1379,7 +1449,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>removeValue</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.343">removeValue</a>(byte[]&nbsp;key)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.354">removeValue</a>(byte[]&nbsp;key)</pre>
 </li>
 </ul>
 <a name="removeColumnFamily-byte:A-">
@@ -1388,7 +1458,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>removeColumnFamily</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.348">removeColumnFamily</a>(byte[]&nbsp;name)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.359">removeColumnFamily</a>(byte[]&nbsp;name)</pre>
 </li>
 </ul>
 <a name="removeCoprocessor-java.lang.String-">
@@ -1397,7 +1467,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>removeCoprocessor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.353">removeCoprocessor</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;className)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.364">removeCoprocessor</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;className)</pre>
 </li>
 </ul>
 <a name="setCompactionEnabled-boolean-">
@@ -1406,7 +1476,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>setCompactionEnabled</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.358">setCompactionEnabled</a>(boolean&nbsp;isEnable)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.369">setCompactionEnabled</a>(boolean&nbsp;isEnable)</pre>
 </li>
 </ul>
 <a name="setDurability-org.apache.hadoop.hbase.client.Durability-">
@@ -1415,7 +1485,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>setDurability</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.363">setDurability</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.374">setDurability</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability)</pre>
 </li>
 </ul>
 <a name="setFlushPolicyClassName-java.lang.String-">
@@ -1424,7 +1494,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>setFlushPolicyClassName</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.368">setFlushPolicyClassName</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;clazz)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.379">setFlushPolicyClassName</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;clazz)</pre>
 </li>
 </ul>
 <a name="setMaxFileSize-long-">
@@ -1433,7 +1503,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>setMaxFileSize</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.373">setMaxFileSize</a>(long&nbsp;maxFileSize)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.384">setMaxFileSize</a>(long&nbsp;maxFileSize)</pre>
 </li>
 </ul>
 <a name="setMemStoreFlushSize-long-">
@@ -1442,7 +1512,25 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>setMemStoreFlushSize</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.378">setMemStoreFlushSize</a>(long&nbsp;memstoreFlushSize)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.389">setMemStoreFlushSize</a>(long&nbsp;memstoreFlushSize)</pre>
+</li>
+</ul>
+<a name="setNormalizerTargetRegionCount-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setNormalizerTargetRegionCount</h4>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.394">setNormalizerTargetRegionCount</a>(int&nbsp;regionCount)</pre>
+</li>
+</ul>
+<a name="setNormalizerTargetRegionSize-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setNormalizerTargetRegionSize</h4>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.399">setNormalizerTargetRegionSize</a>(long&nbsp;regionSize)</pre>
 </li>
 </ul>
 <a name="setNormalizationEnabled-boolean-">
@@ -1451,7 +1539,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>setNormalizationEnabled</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.383">setNormalizationEnabled</a>(boolean&nbsp;isEnable)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.404">setNormalizationEnabled</a>(boolean&nbsp;isEnable)</pre>
 </li>
 </ul>
 <a name="setOwner-org.apache.hadoop.hbase.security.User-">
@@ -1461,7 +1549,7 @@ public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hado
 <li class="blockList">
 <h4>setOwner</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.389">setOwner</a>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;owner)</pre>
+public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.410">setOwner</a>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;owner)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </li>
 </ul>
@@ -1472,7 +1560,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <li class="blockList">
 <h4>setOwnerString</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.395">setOwnerString</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;ownerString)</pre>
+public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.416">setOwnerString</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;ownerString)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </li>
 </ul>
@@ -1482,7 +1570,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockList">
 <li class="blockList">
 <h4>setPriority</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.400">setPriority</a>(int&nbsp;priority)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.421">setPriority</a>(int&nbsp;priority)</pre>
 </li>
 </ul>
 <a name="setReadOnly-boolean-">
@@ -1491,7 +1579,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockList">
 <li class="blockList">
 <h4>setReadOnly</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.405">setReadOnly</a>(boolean&nbsp;readOnly)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.426">setReadOnly</a>(boolean&nbsp;readOnly)</pre>
 </li>
 </ul>
 <a name="setRegionMemStoreReplication-boolean-">
@@ -1500,7 +1588,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockList">
 <li class="blockList">
 <h4>setRegionMemStoreReplication</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.410">setRegionMemStoreReplication</a>(boolean&nbsp;memstoreReplication)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.431">setRegionMemStoreReplication</a>(boolean&nbsp;memstoreReplication)</pre>
 </li>
 </ul>
 <a name="setRegionReplication-int-">
@@ -1509,7 +1597,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockList">
 <li class="blockList">
 <h4>setRegionReplication</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.415">setRegionReplication</a>(int&nbsp;regionReplication)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.436">setRegionReplication</a>(int&nbsp;regionReplication)</pre>
 </li>
 </ul>
 <a name="setRegionSplitPolicyClassName-java.lang.String-">
@@ -1518,7 +1606,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockList">
 <li class="blockList">
 <h4>setRegionSplitPolicyClassName</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.420">setRegionSplitPolicyClassName</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;clazz)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.441">setRegionSplitPolicyClassName</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;clazz)</pre>
 </li>
 </ul>
 <a name="setValue-java.lang.String-java.lang.String-">
@@ -1527,7 +1615,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockList">
 <li class="blockList">
 <h4>setValue</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.425">setValue</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;key,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.446">setValue</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;key,
                                        <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;value)</pre>
 </li>
 </ul>
@@ -1537,7 +1625,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockList">
 <li class="blockList">
 <h4>setValue</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.430">setValue</a>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.451">setValue</a>(<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;key,
                                        <a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a>&nbsp;value)</pre>
 </li>
 </ul>
@@ -1547,7 +1635,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockList">
 <li class="blockList">
 <h4>setValue</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.435">setValue</a>(byte[]&nbsp;key,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.456">setValue</a>(byte[]&nbsp;key,
                                        byte[]&nbsp;value)</pre>
 </li>
 </ul>
@@ -1557,7 +1645,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockList">
 <li class="blockList">
 <h4>setReplicationScope</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.446">setReplicationScope</a>(int&nbsp;scope)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.467">setReplicationScope</a>(int&nbsp;scope)</pre>
 <div class="block">Sets replication scope all & only the columns already in the builder. Columns added later won't
  be backfilled with replication scope.</div>
 <dl>
@@ -1574,7 +1662,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockList">
 <li class="blockList">
 <h4>build</h4>
-<pre>public&nbsp;<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/client/TableDescriptorBuilder.html#line.458">build</a>()</pre>
+<pre>public&nbsp;<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/client/TableDescriptorBuilder.html#line.479">build</a>()</pre>
 </li>
 </ul>
 <a name="toCoprocessorDescriptor-java.lang.String-">
@@ -1583,7 +1671,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toCoprocessorDescriptor</h4>
-<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CoprocessorDescriptor.html" title="interface in org.apache.hadoop.hbase.client">CoprocessorDescriptor</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.1406">toCoprocessorDescriptor</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;spec)</pre>
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CoprocessorDescriptor.html" title="interface in org.apache.hadoop.hbase.client">CoprocessorDescriptor</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.1466">toCoprocessorDescriptor</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;spec)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/org/apache/hadoop/hbase/client/class-use/TableDescriptorBuilder.ModifyableTableDescriptor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/class-use/TableDescriptorBuilder.ModifyableTableDescriptor.html b/devapidocs/org/apache/hadoop/hbase/client/class-use/TableDescriptorBuilder.ModifyableTableDescriptor.html
index f717395..174eba5 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/TableDescriptorBuilder.ModifyableTableDescriptor.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/TableDescriptorBuilder.ModifyableTableDescriptor.html
@@ -271,6 +271,18 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TableDescriptorBuilder.ModifyableTableDescriptor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setNormalizerTargetRegionCount-int-">setNormalizerTargetRegionCount</a></span>(int&nbsp;regionCount)</code>
+<div class="block">Setting the target region count of table normalization .</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TableDescriptorBuilder.ModifyableTableDescriptor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setNormalizerTargetRegionSize-long-">setNormalizerTargetRegionSize</a></span>(long&nbsp;regionSize)</code>
+<div class="block">Setting the target region size of table normalization.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TableDescriptorBuilder.ModifyableTableDescriptor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setOwner-org.apache.hadoop.hbase.security.User-">setOwner</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;owner)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/org/apache/hadoop/hbase/client/class-use/TableDescriptorBuilder.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/class-use/TableDescriptorBuilder.html b/devapidocs/org/apache/hadoop/hbase/client/class-use/TableDescriptorBuilder.html
index a4016ce..c1ddc3d 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/TableDescriptorBuilder.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/TableDescriptorBuilder.html
@@ -192,6 +192,14 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TableDescriptorBuilder.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setNormalizerTargetRegionCount-int-">setNormalizerTargetRegionCount</a></span>(int&nbsp;regionCount)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TableDescriptorBuilder.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setNormalizerTargetRegionSize-long-">setNormalizerTargetRegionSize</a></span>(long&nbsp;regionSize)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TableDescriptorBuilder.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setOwner-org.apache.hadoop.hbase.security.User-">setOwner</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;owner)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>


[13/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/src-html/org/apache/hadoop/hbase/master/TableStateManager.TableStateNotFoundException.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/TableStateManager.TableStateNotFoundException.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/TableStateManager.TableStateNotFoundException.html
index 623d575..f0acbc8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/TableStateManager.TableStateNotFoundException.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/TableStateManager.TableStateNotFoundException.html
@@ -241,151 +241,152 @@
 <span class="sourceLineNo">233</span>    try {<a name="line.233"></a>
 <span class="sourceLineNo">234</span>      MetaTableAccessor.updateTableState(master.getConnection(), tableName, newState);<a name="line.234"></a>
 <span class="sourceLineNo">235</span>      tableName2State.put(tableName, newState);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    } finally {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      if (!succ) {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        tableName2State.remove(tableName);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      }<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    metaStateUpdated(tableName, newState);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>  protected void metaStateUpdated(TableName tableName, TableState.State newState)<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      throws IOException {<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>  protected void metaStateDeleted(TableName tableName) throws IOException {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>  }<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>  @Nullable<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  private TableState readMetaState(TableName tableName) throws IOException {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    TableState.State state = tableName2State.get(tableName);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    if (state != null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      return new TableState(tableName, state);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    TableState tableState = MetaTableAccessor.getTableState(master.getConnection(), tableName);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    if (tableState != null) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      tableName2State.putIfAbsent(tableName, tableState.getState());<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    return tableState;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  }<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>  public void start() throws IOException {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    TableDescriptors tableDescriptors = master.getTableDescriptors();<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    migrateZooKeeper();<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    Connection connection = master.getConnection();<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    fixTableStates(tableDescriptors, connection);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>  }<a name="line.269"></a>
-<span class="sourceLineNo">270</span><a name="line.270"></a>
-<span class="sourceLineNo">271</span>  private void fixTableStates(TableDescriptors tableDescriptors, Connection connection)<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      throws IOException {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    Map&lt;String, TableDescriptor&gt; allDescriptors = tableDescriptors.getAll();<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    Map&lt;String, TableState&gt; states = new HashMap&lt;&gt;();<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    // NOTE: Ful hbase:meta table scan!<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    MetaTableAccessor.fullScanTables(connection, new MetaTableAccessor.Visitor() {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      @Override<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      public boolean visit(Result r) throws IOException {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        TableState state = MetaTableAccessor.getTableState(r);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>        states.put(state.getTableName().getNameAsString(), state);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        return true;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    });<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    for (Map.Entry&lt;String, TableDescriptor&gt; entry : allDescriptors.entrySet()) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      TableName tableName = TableName.valueOf(entry.getKey());<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      if (TableName.isMetaTableName(tableName)) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        // This table is always enabled. No fixup needed. No entry in hbase:meta needed.<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        // Call through to fixTableState though in case a super class wants to do something.<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        fixTableState(new TableState(tableName, TableState.State.ENABLED));<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        continue;<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      }<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      TableState tableState = states.get(entry.getKey());<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (tableState == null) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        LOG.warn(tableName + " has no table state in hbase:meta, assuming ENABLED");<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        fixTableState(new TableState(tableName, TableState.State.ENABLED));<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        tableName2State.put(tableName, TableState.State.ENABLED);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      } else {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        fixTableState(tableState);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        tableName2State.put(tableName, tableState.getState());<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      }<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    }<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>  /**<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   * For subclasses in case they want to do fixup post hbase:meta.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   */<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  protected void fixTableState(TableState tableState) throws IOException {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  }<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span>  /**<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * This code is for case where a hbase2 Master is starting for the first time. ZooKeeper is where<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   * we used to keep table state. On first startup, read zookeeper and update hbase:meta with the<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * table states found in zookeeper. This is tricky as we'll do this check every time we startup<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * until mirroring is disabled. See the {@link #MIGRATE_TABLE_STATE_FROM_ZK_KEY} flag. Original<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   * form of this migration came in with HBASE-13032. It deleted all znodes when done. We can't do<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   * that if we want to support hbase-1.x clients who need to be able to read table state out of zk.<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * See {@link MirroringTableStateManager}.<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * @deprecated Since 2.0.0. Remove in hbase-3.0.0.<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   */<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  @Deprecated<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  private void migrateZooKeeper() throws IOException {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    if (!this.master.getConfiguration().getBoolean(MIGRATE_TABLE_STATE_FROM_ZK_KEY, true)) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      return;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    }<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    try {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      for (Map.Entry&lt;TableName, TableState.State&gt; entry : ZKDataMigrator<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        .queryForTableStates(this.master.getZooKeeper()).entrySet()) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        if (this.master.getTableDescriptors().get(entry.getKey()) == null) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>          deleteZooKeeper(entry.getKey());<a name="line.330"></a>
-<span class="sourceLineNo">331</span>          LOG.info("Purged table state entry from zookeepr for table not in hbase:meta: " +<a name="line.331"></a>
-<span class="sourceLineNo">332</span>            entry.getKey());<a name="line.332"></a>
-<span class="sourceLineNo">333</span>          continue;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        }<a name="line.334"></a>
-<span class="sourceLineNo">335</span>        TableState ts = null;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        try {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>          ts = getTableState(entry.getKey());<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        } catch (TableStateNotFoundException e) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>          // This can happen; table exists but no TableState.<a name="line.339"></a>
-<span class="sourceLineNo">340</span>        }<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        if (ts == null) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>          TableState.State zkstate = entry.getValue();<a name="line.342"></a>
-<span class="sourceLineNo">343</span>          // Only migrate if it is an enable or disabled table. If in-between -- ENABLING or<a name="line.343"></a>
-<span class="sourceLineNo">344</span>          // DISABLING then we have a problem; we are starting up an hbase-2 on a cluster with<a name="line.344"></a>
-<span class="sourceLineNo">345</span>          // RIT. It is going to be rough!<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          if (zkstate.equals(TableState.State.ENABLED) ||<a name="line.346"></a>
-<span class="sourceLineNo">347</span>            zkstate.equals(TableState.State.DISABLED)) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>            LOG.info("Migrating table state from zookeeper to hbase:meta; tableName=" +<a name="line.348"></a>
-<span class="sourceLineNo">349</span>              entry.getKey() + ", state=" + entry.getValue());<a name="line.349"></a>
-<span class="sourceLineNo">350</span>            updateMetaState(entry.getKey(), entry.getValue());<a name="line.350"></a>
-<span class="sourceLineNo">351</span>          } else {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>            LOG.warn("Table={} has no state and zookeeper state is in-between={} (neither " +<a name="line.352"></a>
-<span class="sourceLineNo">353</span>              "ENABLED or DISABLED); NOT MIGRATING table state", entry.getKey(), zkstate);<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>        // What if the table states disagree? Defer to the hbase:meta setting rather than have the<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        // hbase-1.x support prevail.<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    } catch (KeeperException | InterruptedException e) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      LOG.warn("Failed reading table state from zookeeper", e);<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    }<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  }<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>  /**<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * Utility method that knows how to delete the old hbase-1.x table state znode. Used also by the<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * Mirroring subclass.<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * @deprecated Since 2.0.0. To be removed in hbase-3.0.0.<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   */<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  @Deprecated<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  protected void deleteZooKeeper(TableName tableName) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    try {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      // Delete from ZooKeeper<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      String znode = ZNodePaths.joinZNode(this.master.getZooKeeper().getZNodePaths().tableZNode,<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        tableName.getNameAsString());<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      ZKUtil.deleteNodeFailSilent(this.master.getZooKeeper(), znode);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    } catch (KeeperException e) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      LOG.warn("Failed deleting table state from zookeeper", e);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>}<a name="line.380"></a>
+<span class="sourceLineNo">236</span>      succ = true;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    } finally {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      if (!succ) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        tableName2State.remove(tableName);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      }<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    }<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    metaStateUpdated(tableName, newState);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  }<a name="line.243"></a>
+<span class="sourceLineNo">244</span><a name="line.244"></a>
+<span class="sourceLineNo">245</span>  protected void metaStateUpdated(TableName tableName, TableState.State newState)<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      throws IOException {<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>  protected void metaStateDeleted(TableName tableName) throws IOException {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>  }<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>  @Nullable<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  private TableState readMetaState(TableName tableName) throws IOException {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    TableState.State state = tableName2State.get(tableName);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    if (state != null) {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      return new TableState(tableName, state);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    }<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    TableState tableState = MetaTableAccessor.getTableState(master.getConnection(), tableName);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    if (tableState != null) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      tableName2State.putIfAbsent(tableName, tableState.getState());<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return tableState;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>  public void start() throws IOException {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    TableDescriptors tableDescriptors = master.getTableDescriptors();<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    migrateZooKeeper();<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    Connection connection = master.getConnection();<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    fixTableStates(tableDescriptors, connection);<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>  private void fixTableStates(TableDescriptors tableDescriptors, Connection connection)<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      throws IOException {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    Map&lt;String, TableDescriptor&gt; allDescriptors = tableDescriptors.getAll();<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    Map&lt;String, TableState&gt; states = new HashMap&lt;&gt;();<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    // NOTE: Ful hbase:meta table scan!<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    MetaTableAccessor.fullScanTables(connection, new MetaTableAccessor.Visitor() {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      @Override<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      public boolean visit(Result r) throws IOException {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        TableState state = MetaTableAccessor.getTableState(r);<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        states.put(state.getTableName().getNameAsString(), state);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>        return true;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      }<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    });<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    for (Map.Entry&lt;String, TableDescriptor&gt; entry : allDescriptors.entrySet()) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      TableName tableName = TableName.valueOf(entry.getKey());<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      if (TableName.isMetaTableName(tableName)) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        // This table is always enabled. No fixup needed. No entry in hbase:meta needed.<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        // Call through to fixTableState though in case a super class wants to do something.<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        fixTableState(new TableState(tableName, TableState.State.ENABLED));<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        continue;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      }<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      TableState tableState = states.get(entry.getKey());<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      if (tableState == null) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        LOG.warn(tableName + " has no table state in hbase:meta, assuming ENABLED");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>        fixTableState(new TableState(tableName, TableState.State.ENABLED));<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        tableName2State.put(tableName, TableState.State.ENABLED);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      } else {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        fixTableState(tableState);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        tableName2State.put(tableName, tableState.getState());<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  }<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span>  /**<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   * For subclasses in case they want to do fixup post hbase:meta.<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   */<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  protected void fixTableState(TableState tableState) throws IOException {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>  }<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span>  /**<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * This code is for case where a hbase2 Master is starting for the first time. ZooKeeper is where<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   * we used to keep table state. On first startup, read zookeeper and update hbase:meta with the<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * table states found in zookeeper. This is tricky as we'll do this check every time we startup<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   * until mirroring is disabled. See the {@link #MIGRATE_TABLE_STATE_FROM_ZK_KEY} flag. Original<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * form of this migration came in with HBASE-13032. It deleted all znodes when done. We can't do<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * that if we want to support hbase-1.x clients who need to be able to read table state out of zk.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   * See {@link MirroringTableStateManager}.<a name="line.319"></a>
+<span class="sourceLineNo">320</span>   * @deprecated Since 2.0.0. Remove in hbase-3.0.0.<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   */<a name="line.321"></a>
+<span class="sourceLineNo">322</span>  @Deprecated<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  private void migrateZooKeeper() throws IOException {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    if (!this.master.getConfiguration().getBoolean(MIGRATE_TABLE_STATE_FROM_ZK_KEY, true)) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      return;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    }<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    try {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      for (Map.Entry&lt;TableName, TableState.State&gt; entry : ZKDataMigrator<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        .queryForTableStates(this.master.getZooKeeper()).entrySet()) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        if (this.master.getTableDescriptors().get(entry.getKey()) == null) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>          deleteZooKeeper(entry.getKey());<a name="line.331"></a>
+<span class="sourceLineNo">332</span>          LOG.info("Purged table state entry from zookeepr for table not in hbase:meta: " +<a name="line.332"></a>
+<span class="sourceLineNo">333</span>            entry.getKey());<a name="line.333"></a>
+<span class="sourceLineNo">334</span>          continue;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        }<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        TableState ts = null;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        try {<a name="line.337"></a>
+<span class="sourceLineNo">338</span>          ts = getTableState(entry.getKey());<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        } catch (TableStateNotFoundException e) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>          // This can happen; table exists but no TableState.<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        }<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        if (ts == null) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>          TableState.State zkstate = entry.getValue();<a name="line.343"></a>
+<span class="sourceLineNo">344</span>          // Only migrate if it is an enable or disabled table. If in-between -- ENABLING or<a name="line.344"></a>
+<span class="sourceLineNo">345</span>          // DISABLING then we have a problem; we are starting up an hbase-2 on a cluster with<a name="line.345"></a>
+<span class="sourceLineNo">346</span>          // RIT. It is going to be rough!<a name="line.346"></a>
+<span class="sourceLineNo">347</span>          if (zkstate.equals(TableState.State.ENABLED) ||<a name="line.347"></a>
+<span class="sourceLineNo">348</span>            zkstate.equals(TableState.State.DISABLED)) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>            LOG.info("Migrating table state from zookeeper to hbase:meta; tableName=" +<a name="line.349"></a>
+<span class="sourceLineNo">350</span>              entry.getKey() + ", state=" + entry.getValue());<a name="line.350"></a>
+<span class="sourceLineNo">351</span>            updateMetaState(entry.getKey(), entry.getValue());<a name="line.351"></a>
+<span class="sourceLineNo">352</span>          } else {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>            LOG.warn("Table={} has no state and zookeeper state is in-between={} (neither " +<a name="line.353"></a>
+<span class="sourceLineNo">354</span>              "ENABLED or DISABLED); NOT MIGRATING table state", entry.getKey(), zkstate);<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>        // What if the table states disagree? Defer to the hbase:meta setting rather than have the<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        // hbase-1.x support prevail.<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      }<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    } catch (KeeperException | InterruptedException e) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      LOG.warn("Failed reading table state from zookeeper", e);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  }<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span>  /**<a name="line.365"></a>
+<span class="sourceLineNo">366</span>   * Utility method that knows how to delete the old hbase-1.x table state znode. Used also by the<a name="line.366"></a>
+<span class="sourceLineNo">367</span>   * Mirroring subclass.<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   * @deprecated Since 2.0.0. To be removed in hbase-3.0.0.<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   */<a name="line.369"></a>
+<span class="sourceLineNo">370</span>  @Deprecated<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  protected void deleteZooKeeper(TableName tableName) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    try {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      // Delete from ZooKeeper<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      String znode = ZNodePaths.joinZNode(this.master.getZooKeeper().getZNodePaths().tableZNode,<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        tableName.getNameAsString());<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      ZKUtil.deleteNodeFailSilent(this.master.getZooKeeper(), znode);<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    } catch (KeeperException e) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      LOG.warn("Failed deleting table state from zookeeper", e);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
+<span class="sourceLineNo">381</span>}<a name="line.381"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/src-html/org/apache/hadoop/hbase/master/TableStateManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/TableStateManager.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/TableStateManager.html
index 623d575..f0acbc8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/TableStateManager.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/TableStateManager.html
@@ -241,151 +241,152 @@
 <span class="sourceLineNo">233</span>    try {<a name="line.233"></a>
 <span class="sourceLineNo">234</span>      MetaTableAccessor.updateTableState(master.getConnection(), tableName, newState);<a name="line.234"></a>
 <span class="sourceLineNo">235</span>      tableName2State.put(tableName, newState);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    } finally {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      if (!succ) {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        tableName2State.remove(tableName);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      }<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    metaStateUpdated(tableName, newState);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>  protected void metaStateUpdated(TableName tableName, TableState.State newState)<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      throws IOException {<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>  protected void metaStateDeleted(TableName tableName) throws IOException {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>  }<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>  @Nullable<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  private TableState readMetaState(TableName tableName) throws IOException {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    TableState.State state = tableName2State.get(tableName);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    if (state != null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      return new TableState(tableName, state);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    TableState tableState = MetaTableAccessor.getTableState(master.getConnection(), tableName);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    if (tableState != null) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      tableName2State.putIfAbsent(tableName, tableState.getState());<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    return tableState;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  }<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>  public void start() throws IOException {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    TableDescriptors tableDescriptors = master.getTableDescriptors();<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    migrateZooKeeper();<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    Connection connection = master.getConnection();<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    fixTableStates(tableDescriptors, connection);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>  }<a name="line.269"></a>
-<span class="sourceLineNo">270</span><a name="line.270"></a>
-<span class="sourceLineNo">271</span>  private void fixTableStates(TableDescriptors tableDescriptors, Connection connection)<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      throws IOException {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    Map&lt;String, TableDescriptor&gt; allDescriptors = tableDescriptors.getAll();<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    Map&lt;String, TableState&gt; states = new HashMap&lt;&gt;();<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    // NOTE: Ful hbase:meta table scan!<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    MetaTableAccessor.fullScanTables(connection, new MetaTableAccessor.Visitor() {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      @Override<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      public boolean visit(Result r) throws IOException {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        TableState state = MetaTableAccessor.getTableState(r);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>        states.put(state.getTableName().getNameAsString(), state);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        return true;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    });<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    for (Map.Entry&lt;String, TableDescriptor&gt; entry : allDescriptors.entrySet()) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      TableName tableName = TableName.valueOf(entry.getKey());<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      if (TableName.isMetaTableName(tableName)) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        // This table is always enabled. No fixup needed. No entry in hbase:meta needed.<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        // Call through to fixTableState though in case a super class wants to do something.<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        fixTableState(new TableState(tableName, TableState.State.ENABLED));<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        continue;<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      }<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      TableState tableState = states.get(entry.getKey());<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (tableState == null) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        LOG.warn(tableName + " has no table state in hbase:meta, assuming ENABLED");<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        fixTableState(new TableState(tableName, TableState.State.ENABLED));<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        tableName2State.put(tableName, TableState.State.ENABLED);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      } else {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        fixTableState(tableState);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        tableName2State.put(tableName, tableState.getState());<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      }<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    }<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>  /**<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   * For subclasses in case they want to do fixup post hbase:meta.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   */<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  protected void fixTableState(TableState tableState) throws IOException {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  }<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span>  /**<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * This code is for case where a hbase2 Master is starting for the first time. ZooKeeper is where<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   * we used to keep table state. On first startup, read zookeeper and update hbase:meta with the<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * table states found in zookeeper. This is tricky as we'll do this check every time we startup<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * until mirroring is disabled. See the {@link #MIGRATE_TABLE_STATE_FROM_ZK_KEY} flag. Original<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   * form of this migration came in with HBASE-13032. It deleted all znodes when done. We can't do<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   * that if we want to support hbase-1.x clients who need to be able to read table state out of zk.<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * See {@link MirroringTableStateManager}.<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * @deprecated Since 2.0.0. Remove in hbase-3.0.0.<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   */<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  @Deprecated<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  private void migrateZooKeeper() throws IOException {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    if (!this.master.getConfiguration().getBoolean(MIGRATE_TABLE_STATE_FROM_ZK_KEY, true)) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      return;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    }<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    try {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      for (Map.Entry&lt;TableName, TableState.State&gt; entry : ZKDataMigrator<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        .queryForTableStates(this.master.getZooKeeper()).entrySet()) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        if (this.master.getTableDescriptors().get(entry.getKey()) == null) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>          deleteZooKeeper(entry.getKey());<a name="line.330"></a>
-<span class="sourceLineNo">331</span>          LOG.info("Purged table state entry from zookeepr for table not in hbase:meta: " +<a name="line.331"></a>
-<span class="sourceLineNo">332</span>            entry.getKey());<a name="line.332"></a>
-<span class="sourceLineNo">333</span>          continue;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        }<a name="line.334"></a>
-<span class="sourceLineNo">335</span>        TableState ts = null;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        try {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>          ts = getTableState(entry.getKey());<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        } catch (TableStateNotFoundException e) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>          // This can happen; table exists but no TableState.<a name="line.339"></a>
-<span class="sourceLineNo">340</span>        }<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        if (ts == null) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>          TableState.State zkstate = entry.getValue();<a name="line.342"></a>
-<span class="sourceLineNo">343</span>          // Only migrate if it is an enable or disabled table. If in-between -- ENABLING or<a name="line.343"></a>
-<span class="sourceLineNo">344</span>          // DISABLING then we have a problem; we are starting up an hbase-2 on a cluster with<a name="line.344"></a>
-<span class="sourceLineNo">345</span>          // RIT. It is going to be rough!<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          if (zkstate.equals(TableState.State.ENABLED) ||<a name="line.346"></a>
-<span class="sourceLineNo">347</span>            zkstate.equals(TableState.State.DISABLED)) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>            LOG.info("Migrating table state from zookeeper to hbase:meta; tableName=" +<a name="line.348"></a>
-<span class="sourceLineNo">349</span>              entry.getKey() + ", state=" + entry.getValue());<a name="line.349"></a>
-<span class="sourceLineNo">350</span>            updateMetaState(entry.getKey(), entry.getValue());<a name="line.350"></a>
-<span class="sourceLineNo">351</span>          } else {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>            LOG.warn("Table={} has no state and zookeeper state is in-between={} (neither " +<a name="line.352"></a>
-<span class="sourceLineNo">353</span>              "ENABLED or DISABLED); NOT MIGRATING table state", entry.getKey(), zkstate);<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>        // What if the table states disagree? Defer to the hbase:meta setting rather than have the<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        // hbase-1.x support prevail.<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    } catch (KeeperException | InterruptedException e) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      LOG.warn("Failed reading table state from zookeeper", e);<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    }<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  }<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>  /**<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * Utility method that knows how to delete the old hbase-1.x table state znode. Used also by the<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * Mirroring subclass.<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * @deprecated Since 2.0.0. To be removed in hbase-3.0.0.<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   */<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  @Deprecated<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  protected void deleteZooKeeper(TableName tableName) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    try {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      // Delete from ZooKeeper<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      String znode = ZNodePaths.joinZNode(this.master.getZooKeeper().getZNodePaths().tableZNode,<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        tableName.getNameAsString());<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      ZKUtil.deleteNodeFailSilent(this.master.getZooKeeper(), znode);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    } catch (KeeperException e) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      LOG.warn("Failed deleting table state from zookeeper", e);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>}<a name="line.380"></a>
+<span class="sourceLineNo">236</span>      succ = true;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    } finally {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      if (!succ) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        tableName2State.remove(tableName);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      }<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    }<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    metaStateUpdated(tableName, newState);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  }<a name="line.243"></a>
+<span class="sourceLineNo">244</span><a name="line.244"></a>
+<span class="sourceLineNo">245</span>  protected void metaStateUpdated(TableName tableName, TableState.State newState)<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      throws IOException {<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>  protected void metaStateDeleted(TableName tableName) throws IOException {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>  }<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>  @Nullable<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  private TableState readMetaState(TableName tableName) throws IOException {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    TableState.State state = tableName2State.get(tableName);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    if (state != null) {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      return new TableState(tableName, state);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    }<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    TableState tableState = MetaTableAccessor.getTableState(master.getConnection(), tableName);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    if (tableState != null) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      tableName2State.putIfAbsent(tableName, tableState.getState());<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return tableState;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>  public void start() throws IOException {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    TableDescriptors tableDescriptors = master.getTableDescriptors();<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    migrateZooKeeper();<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    Connection connection = master.getConnection();<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    fixTableStates(tableDescriptors, connection);<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>  private void fixTableStates(TableDescriptors tableDescriptors, Connection connection)<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      throws IOException {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    Map&lt;String, TableDescriptor&gt; allDescriptors = tableDescriptors.getAll();<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    Map&lt;String, TableState&gt; states = new HashMap&lt;&gt;();<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    // NOTE: Ful hbase:meta table scan!<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    MetaTableAccessor.fullScanTables(connection, new MetaTableAccessor.Visitor() {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      @Override<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      public boolean visit(Result r) throws IOException {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        TableState state = MetaTableAccessor.getTableState(r);<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        states.put(state.getTableName().getNameAsString(), state);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>        return true;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      }<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    });<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    for (Map.Entry&lt;String, TableDescriptor&gt; entry : allDescriptors.entrySet()) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      TableName tableName = TableName.valueOf(entry.getKey());<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      if (TableName.isMetaTableName(tableName)) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        // This table is always enabled. No fixup needed. No entry in hbase:meta needed.<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        // Call through to fixTableState though in case a super class wants to do something.<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        fixTableState(new TableState(tableName, TableState.State.ENABLED));<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        continue;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      }<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      TableState tableState = states.get(entry.getKey());<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      if (tableState == null) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        LOG.warn(tableName + " has no table state in hbase:meta, assuming ENABLED");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>        fixTableState(new TableState(tableName, TableState.State.ENABLED));<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        tableName2State.put(tableName, TableState.State.ENABLED);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      } else {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        fixTableState(tableState);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        tableName2State.put(tableName, tableState.getState());<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  }<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span>  /**<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   * For subclasses in case they want to do fixup post hbase:meta.<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   */<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  protected void fixTableState(TableState tableState) throws IOException {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>  }<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span>  /**<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * This code is for case where a hbase2 Master is starting for the first time. ZooKeeper is where<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   * we used to keep table state. On first startup, read zookeeper and update hbase:meta with the<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * table states found in zookeeper. This is tricky as we'll do this check every time we startup<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   * until mirroring is disabled. See the {@link #MIGRATE_TABLE_STATE_FROM_ZK_KEY} flag. Original<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * form of this migration came in with HBASE-13032. It deleted all znodes when done. We can't do<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * that if we want to support hbase-1.x clients who need to be able to read table state out of zk.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   * See {@link MirroringTableStateManager}.<a name="line.319"></a>
+<span class="sourceLineNo">320</span>   * @deprecated Since 2.0.0. Remove in hbase-3.0.0.<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   */<a name="line.321"></a>
+<span class="sourceLineNo">322</span>  @Deprecated<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  private void migrateZooKeeper() throws IOException {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    if (!this.master.getConfiguration().getBoolean(MIGRATE_TABLE_STATE_FROM_ZK_KEY, true)) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      return;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    }<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    try {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      for (Map.Entry&lt;TableName, TableState.State&gt; entry : ZKDataMigrator<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        .queryForTableStates(this.master.getZooKeeper()).entrySet()) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        if (this.master.getTableDescriptors().get(entry.getKey()) == null) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>          deleteZooKeeper(entry.getKey());<a name="line.331"></a>
+<span class="sourceLineNo">332</span>          LOG.info("Purged table state entry from zookeepr for table not in hbase:meta: " +<a name="line.332"></a>
+<span class="sourceLineNo">333</span>            entry.getKey());<a name="line.333"></a>
+<span class="sourceLineNo">334</span>          continue;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        }<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        TableState ts = null;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        try {<a name="line.337"></a>
+<span class="sourceLineNo">338</span>          ts = getTableState(entry.getKey());<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        } catch (TableStateNotFoundException e) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>          // This can happen; table exists but no TableState.<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        }<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        if (ts == null) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>          TableState.State zkstate = entry.getValue();<a name="line.343"></a>
+<span class="sourceLineNo">344</span>          // Only migrate if it is an enable or disabled table. If in-between -- ENABLING or<a name="line.344"></a>
+<span class="sourceLineNo">345</span>          // DISABLING then we have a problem; we are starting up an hbase-2 on a cluster with<a name="line.345"></a>
+<span class="sourceLineNo">346</span>          // RIT. It is going to be rough!<a name="line.346"></a>
+<span class="sourceLineNo">347</span>          if (zkstate.equals(TableState.State.ENABLED) ||<a name="line.347"></a>
+<span class="sourceLineNo">348</span>            zkstate.equals(TableState.State.DISABLED)) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>            LOG.info("Migrating table state from zookeeper to hbase:meta; tableName=" +<a name="line.349"></a>
+<span class="sourceLineNo">350</span>              entry.getKey() + ", state=" + entry.getValue());<a name="line.350"></a>
+<span class="sourceLineNo">351</span>            updateMetaState(entry.getKey(), entry.getValue());<a name="line.351"></a>
+<span class="sourceLineNo">352</span>          } else {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>            LOG.warn("Table={} has no state and zookeeper state is in-between={} (neither " +<a name="line.353"></a>
+<span class="sourceLineNo">354</span>              "ENABLED or DISABLED); NOT MIGRATING table state", entry.getKey(), zkstate);<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>        // What if the table states disagree? Defer to the hbase:meta setting rather than have the<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        // hbase-1.x support prevail.<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      }<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    } catch (KeeperException | InterruptedException e) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      LOG.warn("Failed reading table state from zookeeper", e);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  }<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span>  /**<a name="line.365"></a>
+<span class="sourceLineNo">366</span>   * Utility method that knows how to delete the old hbase-1.x table state znode. Used also by the<a name="line.366"></a>
+<span class="sourceLineNo">367</span>   * Mirroring subclass.<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   * @deprecated Since 2.0.0. To be removed in hbase-3.0.0.<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   */<a name="line.369"></a>
+<span class="sourceLineNo">370</span>  @Deprecated<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  protected void deleteZooKeeper(TableName tableName) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    try {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      // Delete from ZooKeeper<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      String znode = ZNodePaths.joinZNode(this.master.getZooKeeper().getZNodePaths().tableZNode,<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        tableName.getNameAsString());<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      ZKUtil.deleteNodeFailSilent(this.master.getZooKeeper(), znode);<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    } catch (KeeperException e) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      LOG.warn("Failed deleting table state from zookeeper", e);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
+<span class="sourceLineNo">381</span>}<a name="line.381"></a>
 
 
 


[04/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
index 9c54904..0a656db 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
@@ -1371,589 +1371,581 @@
 <span class="sourceLineNo">1363</span>    assert subprocStack != null : "Called rollback with no steps executed rootProc=" + rootProc;<a name="line.1363"></a>
 <span class="sourceLineNo">1364</span><a name="line.1364"></a>
 <span class="sourceLineNo">1365</span>    int stackTail = subprocStack.size();<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>    boolean reuseLock = false;<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>    while (stackTail --&gt; 0) {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>      Procedure&lt;TEnvironment&gt; proc = subprocStack.get(stackTail);<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span><a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>      LockState lockState;<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>      if (!reuseLock &amp;&amp; (lockState = acquireLock(proc)) != LockState.LOCK_ACQUIRED) {<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>        // can't take a lock on the procedure, add the root-proc back on the<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>        // queue waiting for the lock availability<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>        return lockState;<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>      }<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span><a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      lockState = executeRollback(proc);<a name="line.1377"></a>
+<span class="sourceLineNo">1366</span>    while (stackTail-- &gt; 0) {<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>      Procedure&lt;TEnvironment&gt; proc = subprocStack.get(stackTail);<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span><a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>      LockState lockState = acquireLock(proc);<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>      if (lockState != LockState.LOCK_ACQUIRED) {<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>        // can't take a lock on the procedure, add the root-proc back on the<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>        // queue waiting for the lock availability<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>        return lockState;<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>      }<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span><a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>      lockState = executeRollback(proc);<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      releaseLock(proc, false);<a name="line.1377"></a>
 <span class="sourceLineNo">1378</span>      boolean abortRollback = lockState != LockState.LOCK_ACQUIRED;<a name="line.1378"></a>
 <span class="sourceLineNo">1379</span>      abortRollback |= !isRunning() || !store.isRunning();<a name="line.1379"></a>
 <span class="sourceLineNo">1380</span><a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      // If the next procedure is the same to this one<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      // (e.g. StateMachineProcedure reuse the same instance)<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      // we can avoid to lock/unlock each step<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>      reuseLock = stackTail &gt; 0 &amp;&amp; (subprocStack.get(stackTail - 1) == proc) &amp;&amp; !abortRollback;<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>      if (!reuseLock &amp;&amp; proc.hasLock()) {<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        releaseLock(proc, false);<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>      }<a name="line.1387"></a>
+<span class="sourceLineNo">1381</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      // useful to test the procedure recovery.<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>      if (abortRollback) {<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>        return lockState;<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>      }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span><a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>      subprocStack.remove(stackTail);<a name="line.1387"></a>
 <span class="sourceLineNo">1388</span><a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>      // useful to test the procedure recovery.<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      if (abortRollback) {<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>        return lockState;<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>      }<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span><a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>      subprocStack.remove(stackTail);<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span><a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>      if (proc.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>        return LockState.LOCK_YIELD_WAIT;<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>      }<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span><a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>      if (proc != rootProc) {<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>        execCompletionCleanup(proc);<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      }<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>    }<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span><a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    // Finalize the procedure state<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>    LOG.info("Rolled back " + rootProc +<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>             " exec-time=" + StringUtils.humanTimeDiff(rootProc.elapsedTime()));<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>    procedureFinished(rootProc);<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>    return LockState.LOCK_ACQUIRED;<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>  }<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span><a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>  /**<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>   * Execute the rollback of the procedure step.<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>   * It updates the store with the new state (stack index)<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>   * or will remove completly the procedure in case it is a child.<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>   */<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>  private LockState executeRollback(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>    try {<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>      proc.doRollback(getEnvironment());<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>    } catch (IOException e) {<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>      LOG.debug("Roll back attempt failed for {}", proc, e);<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>    } catch (InterruptedException e) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>      handleInterruptedException(proc, e);<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>    } catch (Throwable e) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>      LOG.error(HBaseMarkers.FATAL, "CODE-BUG: Uncaught runtime exception for " + proc, e);<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>    }<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span><a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>    // allows to kill the executor before something is stored to the wal.<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>    // useful to test the procedure recovery.<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>    if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate()) {<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>      String msg = "TESTING: Kill before store update";<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>      LOG.debug(msg);<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      stop();<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>      throw new RuntimeException(msg);<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    }<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span><a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>    if (proc.removeStackIndex()) {<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      proc.setState(ProcedureState.ROLLEDBACK);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span><a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      // update metrics on finishing the procedure (fail)<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>      proc.updateMetricsOnFinish(getEnvironment(), proc.elapsedTime(), false);<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span><a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>      if (proc.hasParent()) {<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>        store.delete(proc.getProcId());<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>        procedures.remove(proc.getProcId());<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      } else {<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>        final long[] childProcIds = rollbackStack.get(proc.getProcId()).getSubprocedureIds();<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>        if (childProcIds != null) {<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>          store.delete(proc, childProcIds);<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>        } else {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>          store.update(proc);<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>        }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      }<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>    } else {<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>      store.update(proc);<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    }<a name="line.1461"></a>
+<span class="sourceLineNo">1389</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>      if (proc.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        return LockState.LOCK_YIELD_WAIT;<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span><a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      if (proc != rootProc) {<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>        execCompletionCleanup(proc);<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>      }<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>    }<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span><a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>    // Finalize the procedure state<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>    LOG.info("Rolled back " + rootProc +<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>             " exec-time=" + StringUtils.humanTimeDiff(rootProc.elapsedTime()));<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>    procedureFinished(rootProc);<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>    return LockState.LOCK_ACQUIRED;<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>  }<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span><a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>  /**<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>   * Execute the rollback of the procedure step.<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>   * It updates the store with the new state (stack index)<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>   * or will remove completly the procedure in case it is a child.<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>   */<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>  private LockState executeRollback(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>    try {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>      proc.doRollback(getEnvironment());<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>    } catch (IOException e) {<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      LOG.debug("Roll back attempt failed for {}", proc, e);<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>    } catch (InterruptedException e) {<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>      handleInterruptedException(proc, e);<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>      return LockState.LOCK_YIELD_WAIT;<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>    } catch (Throwable e) {<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>      LOG.error(HBaseMarkers.FATAL, "CODE-BUG: Uncaught runtime exception for " + proc, e);<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>    }<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span><a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>    // allows to kill the executor before something is stored to the wal.<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    // useful to test the procedure recovery.<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>    if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate()) {<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>      String msg = "TESTING: Kill before store update";<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      LOG.debug(msg);<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      stop();<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>      throw new RuntimeException(msg);<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>    }<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span><a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>    if (proc.removeStackIndex()) {<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>      proc.setState(ProcedureState.ROLLEDBACK);<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span><a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>      // update metrics on finishing the procedure (fail)<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>      proc.updateMetricsOnFinish(getEnvironment(), proc.elapsedTime(), false);<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span><a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>      if (proc.hasParent()) {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>        store.delete(proc.getProcId());<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>        procedures.remove(proc.getProcId());<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      } else {<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>        final long[] childProcIds = rollbackStack.get(proc.getProcId()).getSubprocedureIds();<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>        if (childProcIds != null) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>          store.delete(proc, childProcIds);<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>        } else {<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>          store.update(proc);<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>        }<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>      }<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>    } else {<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>      store.update(proc);<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>    }<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span><a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>    return LockState.LOCK_ACQUIRED;<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>  }<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span><a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>  private void yieldProcedure(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>    releaseLock(proc, false);<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    scheduler.yield(proc);<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>  }<a name="line.1461"></a>
 <span class="sourceLineNo">1462</span><a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>    return LockState.LOCK_ACQUIRED;<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>  }<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span><a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>  private void yieldProcedure(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>    releaseLock(proc, false);<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>    scheduler.yield(proc);<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>  }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span><a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>  /**<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>   * Executes &lt;code&gt;procedure&lt;/code&gt;<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>   * &lt;ul&gt;<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>   *  &lt;li&gt;Calls the doExecute() of the procedure<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>   *  &lt;li&gt;If the procedure execution didn't fail (i.e. valid user input)<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>   *  &lt;ul&gt;<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>   *    &lt;li&gt;...and returned subprocedures<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>   *    &lt;ul&gt;&lt;li&gt;The subprocedures are initialized.<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>   *      &lt;li&gt;The subprocedures are added to the store<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>   *      &lt;li&gt;The subprocedures are added to the runnable queue<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>   *      &lt;li&gt;The procedure is now in a WAITING state, waiting for the subprocedures to complete<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>   *    &lt;/ul&gt;<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>   *    &lt;/li&gt;<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>   *   &lt;li&gt;...if there are no subprocedure<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>   *    &lt;ul&gt;&lt;li&gt;the procedure completed successfully<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>   *      &lt;li&gt;if there is a parent (WAITING)<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>   *      &lt;li&gt;the parent state will be set to RUNNABLE<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>   *    &lt;/ul&gt;<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>   *   &lt;/li&gt;<a name="line.1489"></a>
+<span class="sourceLineNo">1463</span>  /**<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>   * Executes &lt;code&gt;procedure&lt;/code&gt;<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>   * &lt;ul&gt;<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>   *  &lt;li&gt;Calls the doExecute() of the procedure<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>   *  &lt;li&gt;If the procedure execution didn't fail (i.e. valid user input)<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>   *  &lt;ul&gt;<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>   *    &lt;li&gt;...and returned subprocedures<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>   *    &lt;ul&gt;&lt;li&gt;The subprocedures are initialized.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>   *      &lt;li&gt;The subprocedures are added to the store<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>   *      &lt;li&gt;The subprocedures are added to the runnable queue<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>   *      &lt;li&gt;The procedure is now in a WAITING state, waiting for the subprocedures to complete<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>   *    &lt;/ul&gt;<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>   *    &lt;/li&gt;<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>   *   &lt;li&gt;...if there are no subprocedure<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>   *    &lt;ul&gt;&lt;li&gt;the procedure completed successfully<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>   *      &lt;li&gt;if there is a parent (WAITING)<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>   *      &lt;li&gt;the parent state will be set to RUNNABLE<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>   *    &lt;/ul&gt;<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>   *   &lt;/li&gt;<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>   *  &lt;/ul&gt;<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>   *  &lt;/li&gt;<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>   *  &lt;li&gt;In case of failure<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>   *  &lt;ul&gt;<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>   *    &lt;li&gt;The store is updated with the new state&lt;/li&gt;<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>   *    &lt;li&gt;The executor (caller of this method) will start the rollback of the procedure&lt;/li&gt;<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>   *  &lt;/ul&gt;<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>   *  &lt;/li&gt;<a name="line.1489"></a>
 <span class="sourceLineNo">1490</span>   *  &lt;/ul&gt;<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>   *  &lt;/li&gt;<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>   *  &lt;li&gt;In case of failure<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>   *  &lt;ul&gt;<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>   *    &lt;li&gt;The store is updated with the new state&lt;/li&gt;<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>   *    &lt;li&gt;The executor (caller of this method) will start the rollback of the procedure&lt;/li&gt;<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>   *  &lt;/ul&gt;<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>   *  &lt;/li&gt;<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>   *  &lt;/ul&gt;<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>   */<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  private void execProcedure(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>    Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>        "NOT RUNNABLE! " + procedure.toString());<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span><a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    // Procedures can suspend themselves. They skip out by throwing a ProcedureSuspendedException.<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    // The exception is caught below and then we hurry to the exit without disturbing state. The<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>    // idea is that the processing of this procedure will be unsuspended later by an external event<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>    // such the report of a region open.<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    boolean suspended = false;<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span><a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    // Whether to 're-' -execute; run through the loop again.<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>    boolean reExecute = false;<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span><a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    Procedure&lt;TEnvironment&gt;[] subprocs = null;<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>    do {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>      reExecute = false;<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>      try {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>        subprocs = procedure.doExecute(getEnvironment());<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>        if (subprocs != null &amp;&amp; subprocs.length == 0) {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>          subprocs = null;<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        }<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      } catch (ProcedureSuspendedException e) {<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        LOG.trace("Suspend {}", procedure);<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>        suspended = true;<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>      } catch (ProcedureYieldException e) {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>        LOG.trace("Yield {}", procedure, e);<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>        yieldProcedure(procedure);<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>        return;<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      } catch (InterruptedException e) {<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        LOG.trace("Yield interrupt {}", procedure, e);<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>        handleInterruptedException(procedure, e);<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>        yieldProcedure(procedure);<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>        return;<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>      } catch (Throwable e) {<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>        // Catch NullPointerExceptions or similar errors...<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>        String msg = "CODE-BUG: Uncaught runtime exception: " + procedure;<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>        LOG.error(msg, e);<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>        procedure.setFailure(new RemoteProcedureException(msg, e));<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>      }<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span><a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      if (!procedure.isFailed()) {<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>        if (subprocs != null) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>          if (subprocs.length == 1 &amp;&amp; subprocs[0] == procedure) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>            // Procedure returned itself. Quick-shortcut for a state machine-like procedure;<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>            // i.e. we go around this loop again rather than go back out on the scheduler queue.<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>            subprocs = null;<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>            reExecute = true;<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>            LOG.trace("Short-circuit to next step on pid={}", procedure.getProcId());<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          } else {<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>            // Yield the current procedure, and make the subprocedure runnable<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>            // subprocs may come back 'null'.<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            subprocs = initializeChildren(procStack, procedure, subprocs);<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            LOG.info("Initialized subprocedures=" +<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>              (subprocs == null? null:<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>                Stream.of(subprocs).map(e -&gt; "{" + e.toString() + "}").<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>                collect(Collectors.toList()).toString()));<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>          }<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>        } else if (procedure.getState() == ProcedureState.WAITING_TIMEOUT) {<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>          LOG.trace("Added to timeoutExecutor {}", procedure);<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>          timeoutExecutor.add(procedure);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>        } else if (!suspended) {<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>          // No subtask, so we are done<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>          procedure.setState(ProcedureState.SUCCESS);<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        }<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      }<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span><a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>      // Add the procedure to the stack<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      procStack.addRollbackStep(procedure);<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span><a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      // useful to test the procedure recovery.<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>      if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate(suspended)) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>        String msg = "TESTING: Kill before store update: " + procedure;<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>        LOG.debug(msg);<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>        stop();<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        throw new RuntimeException(msg);<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>      }<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span><a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>      //<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      // Commit the transaction even if a suspend (state may have changed). Note this append<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      // can take a bunch of time to complete.<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span><a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      // if the store is not running we are aborting<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      if (!store.isRunning()) {<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>        return;<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>      }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>        yieldProcedure(procedure);<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>        return;<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>      }<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>    } while (reExecute);<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    // Submit the new subprocedures<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>      submitChildrenProcedures(subprocs);<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>    }<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span><a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>    // we need to log the release lock operation before waking up the parent procedure, as there<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    // could be race that the parent procedure may call updateStoreOnExec ahead of us and remove all<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>    // the sub procedures from store and cause problems...<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    releaseLock(procedure, false);<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span><a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>    // if the procedure is complete and has a parent, count down the children latch.<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>    // If 'suspended', do nothing to change state -- let other threads handle unsuspend event.<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    if (!suspended &amp;&amp; procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      countDownChildren(procStack, procedure);<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span><a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>  private Procedure&lt;TEnvironment&gt;[] initializeChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    assert subprocs != null : "expected subprocedures";<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      if (subproc == null) {<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>          new IllegalArgumentIOException(msg)));<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>        return null;<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>      }<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span><a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>      subproc.setRootProcId(rootProcId);<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>      subproc.setProcId(nextProcId());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>      procStack.addSubProcedure(subproc);<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>    }<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span><a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    if (!procedure.isFailed()) {<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>      switch (procedure.getState()) {<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>        case RUNNABLE:<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>          break;<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>        case WAITING_TIMEOUT:<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>          timeoutExecutor.add(procedure);<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>          break;<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>        default:<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>          break;<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>      }<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>    }<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    return subprocs;<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>  }<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span><a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>  private void submitChildrenProcedures(Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>      subproc.updateMetricsOnSubmit(getEnvironment());<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      scheduler.addFront(subproc);<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>  }<a name="line.1663"></a>
+<span class="sourceLineNo">1491</span>   */<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>  private void execProcedure(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>    Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>        "NOT RUNNABLE! " + procedure.toString());<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span><a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>    // Procedures can suspend themselves. They skip out by throwing a ProcedureSuspendedException.<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>    // The exception is caught below and then we hurry to the exit without disturbing state. The<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>    // idea is that the processing of this procedure will be unsuspended later by an external event<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>    // such the report of a region open.<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>    boolean suspended = false;<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span><a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    // Whether to 're-' -execute; run through the loop again.<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>    boolean reExecute = false;<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span><a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>    Procedure&lt;TEnvironment&gt;[] subprocs = null;<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>    do {<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>      reExecute = false;<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      try {<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>        subprocs = procedure.doExecute(getEnvironment());<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>        if (subprocs != null &amp;&amp; subprocs.length == 0) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>          subprocs = null;<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        }<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>      } catch (ProcedureSuspendedException e) {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>        LOG.trace("Suspend {}", procedure);<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>        suspended = true;<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>      } catch (ProcedureYieldException e) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>        LOG.trace("Yield {}", procedure, e);<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>        yieldProcedure(procedure);<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>        return;<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>      } catch (InterruptedException e) {<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        LOG.trace("Yield interrupt {}", procedure, e);<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>        handleInterruptedException(procedure, e);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>        yieldProcedure(procedure);<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>        return;<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      } catch (Throwable e) {<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>        // Catch NullPointerExceptions or similar errors...<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>        String msg = "CODE-BUG: Uncaught runtime exception: " + procedure;<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>        LOG.error(msg, e);<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>        procedure.setFailure(new RemoteProcedureException(msg, e));<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>      }<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span><a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      if (!procedure.isFailed()) {<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>        if (subprocs != null) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>          if (subprocs.length == 1 &amp;&amp; subprocs[0] == procedure) {<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>            // Procedure returned itself. Quick-shortcut for a state machine-like procedure;<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>            // i.e. we go around this loop again rather than go back out on the scheduler queue.<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>            subprocs = null;<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>            reExecute = true;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>            LOG.trace("Short-circuit to next step on pid={}", procedure.getProcId());<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>          } else {<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>            // Yield the current procedure, and make the subprocedure runnable<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>            // subprocs may come back 'null'.<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>            subprocs = initializeChildren(procStack, procedure, subprocs);<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>            LOG.info("Initialized subprocedures=" +<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>              (subprocs == null? null:<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>                Stream.of(subprocs).map(e -&gt; "{" + e.toString() + "}").<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>                collect(Collectors.toList()).toString()));<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>          }<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>        } else if (procedure.getState() == ProcedureState.WAITING_TIMEOUT) {<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>          LOG.trace("Added to timeoutExecutor {}", procedure);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>          timeoutExecutor.add(procedure);<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>        } else if (!suspended) {<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          // No subtask, so we are done<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          procedure.setState(ProcedureState.SUCCESS);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>        }<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>      }<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span><a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>      // Add the procedure to the stack<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>      procStack.addRollbackStep(procedure);<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span><a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>      // allows to kill the executor before something is stored to the wal.<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>      // useful to test the procedure recovery.<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>      if (testing != null &amp;&amp; testing.shouldKillBeforeStoreUpdate(suspended)) {<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>        String msg = "TESTING: Kill before store update: " + procedure;<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        LOG.debug(msg);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>        stop();<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>        throw new RuntimeException(msg);<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>      }<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span><a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      //<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>      // Commit the transaction even if a suspend (state may have changed). Note this append<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>      // can take a bunch of time to complete.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span><a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      // if the store is not running we are aborting<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>      if (!store.isRunning()) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>        return;<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>      }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>        yieldProcedure(procedure);<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>        return;<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>      }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>    } while (reExecute);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>    // Submit the new subprocedures<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      submitChildrenProcedures(subprocs);<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>    }<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span><a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    // we need to log the release lock operation before waking up the parent procedure, as there<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    // could be race that the parent procedure may call updateStoreOnExec ahead of us and remove all<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    // the sub procedures from store and cause problems...<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    releaseLock(procedure, false);<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span><a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    // if the procedure is complete and has a parent, count down the children latch.<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>    // If 'suspended', do nothing to change state -- let other threads handle unsuspend event.<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    if (!suspended &amp;&amp; procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      countDownChildren(procStack, procedure);<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>    }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>  }<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span><a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>  private Procedure&lt;TEnvironment&gt;[] initializeChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    assert subprocs != null : "expected subprocedures";<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>      if (subproc == null) {<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>          new IllegalArgumentIOException(msg)));<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>        return null;<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>      }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span><a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      subproc.setRootProcId(rootProcId);<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      subproc.setProcId(nextProcId());<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      procStack.addSubProcedure(subproc);<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>    }<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span><a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>    if (!procedure.isFailed()) {<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>      switch (procedure.getState()) {<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>        case RUNNABLE:<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>          break;<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        case WAITING_TIMEOUT:<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>          timeoutExecutor.add(procedure);<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>          break;<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>        default:<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          break;<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>      }<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>    }<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    return subprocs;<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>  }<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span><a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>  private void submitChildrenProcedures(Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>      Procedure&lt;TEnvironment&gt; subproc = subprocs[i];<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>      subproc.updateMetricsOnSubmit(getEnvironment());<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>      scheduler.addFront(subproc);<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    }<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>  }<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span><a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>  private void countDownChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    Procedure&lt;TEnvironment&gt; parent = procedures.get(procedure.getParentProcId());<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    if (parent == null) {<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>      assert procStack.isRollingback();<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>      return;<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    }<a name="line.1663"></a>
 <span class="sourceLineNo">1664</span><a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>  private void countDownChildren(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      Procedure&lt;TEnvironment&gt; procedure) {<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>    Procedure&lt;TEnvironment&gt; parent = procedures.get(procedure.getParentProcId());<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    if (parent == null) {<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      assert procStack.isRollingback();<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>      return;<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>    }<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span><a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>    // If this procedure is the last child awake the parent procedure<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>    if (parent.tryRunnable()) {<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>      // If we succeeded in making the parent runnable -- i.e. all of its<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      // children have completed, move parent to front of the queue.<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      store.update(parent);<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      scheduler.addFront(parent);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      LOG.info("Finished subprocedure(s) of " + parent + "; resume parent processing.");<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>      return;<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>    }<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>  }<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span><a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>  private void updateStoreOnExec(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>      if (LOG.isTraceEnabled()) {<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>      }<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      store.insert(procedure, subprocs);<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>    } else {<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      LOG.trace("Store update {}", procedure);<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>        // remove child procedures<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        if (childProcIds != null) {<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>          store.delete(procedure, childProcIds);<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>            procedures.remove(childProcIds[i]);<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>          }<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>        } else {<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>          store.update(procedure);<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      } else {<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        store.update(procedure);<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>      }<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>    }<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>  }<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span><a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>  private void handleInterruptedException(Procedure&lt;TEnvironment&gt; proc, InterruptedException e) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>    LOG.trace("Interrupt during {}. suspend and retry it later.", proc, e);<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>    // and the executor/store will be stopped.<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>  }<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span><a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>  private void execCompletionCleanup(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    final TEnvironment env = getEnvironment();<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>    if (proc.hasLock()) {<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>      LOG.warn("Usually this should not happen, we will release the lock before if the procedure" +<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>        " is finished, even if the holdLock is true, arrive here means we have some holes where" +<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        " we do not release the lock. And the releaseLock below may fail since the procedure may" +<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>        " have already been deleted from the procedure store.");<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>      releaseLock(proc, true);<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>    }<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>    try {<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>      proc.completionCleanup(env);<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>    } catch (Throwable e) {<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>    }<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>  }<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span><a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>  private void procedureFinished(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>    // call the procedure completion cleanup handler<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>    execCompletionCleanup(proc);<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span><a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>    CompletedProcedureRetainer&lt;TEnvironment&gt; retainer = new CompletedProcedureRetainer&lt;&gt;(proc);<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span><a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>    // update the executor internal state maps<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>      retainer.setClientAckTime(0);<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>    }<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span><a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>    completed.put(proc.getProcId(), retainer);<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>    rollbackStack.remove(proc.getProcId());<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    procedures.remove(proc.getProcId());<a name="line.1749"></a>
+<span class="sourceLineNo">1665</span>    // If this procedure is the last child awake the parent procedure<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>    if (parent.tryRunnable()) {<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>      // If we succeeded in making the parent runnable -- i.e. all of its<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      // children have completed, move parent to front of the queue.<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>      store.update(parent);<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>      scheduler.addFront(parent);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      LOG.info("Finished subprocedure(s) of " + parent + "; resume parent processing.");<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>      return;<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>    }<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>  }<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span><a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>  private void updateStoreOnExec(RootProcedureState&lt;TEnvironment&gt; procStack,<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>      Procedure&lt;TEnvironment&gt; procedure, Procedure&lt;TEnvironment&gt;[] subprocs) {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      if (LOG.isTraceEnabled()) {<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>      }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      store.insert(procedure, subprocs);<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>    } else {<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      LOG.trace("Store update {}", procedure);<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>        // remove child procedures<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>        if (childProcIds != null) {<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>          store.delete(procedure, childProcIds);<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>            procedures.remove(childProcIds[i]);<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>          }<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>        } else {<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>          store.update(procedure);<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>        }<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>      } else {<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>        store.update(procedure);<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      }<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>    }<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>  }<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span><a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>  private void handleInterruptedException(Procedure&lt;TEnvironment&gt; proc, InterruptedException e) {<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>    LOG.trace("Interrupt during {}. suspend and retry it later.", proc, e);<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>    // and the executor/store will be stopped.<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>  }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span><a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  private void execCompletionCleanup(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>    final TEnvironment env = getEnvironment();<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>    if (proc.hasLock()) {<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      LOG.warn("Usually this should not happen, we will release the lock before if the procedure" +<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>        " is finished, even if the holdLock is true, arrive here means we have some holes where" +<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        " we do not release the lock. And the releaseLock below may fail since the procedure may" +<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        " have already been deleted from the procedure store.");<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      releaseLock(proc, true);<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>    }<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>    try {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>      proc.completionCleanup(env);<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>    } catch (Throwable e) {<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>    }<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>  }<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span><a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>  private void procedureFinished(Procedure&lt;TEnvironment&gt; proc) {<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    // call the procedure completion cleanup handler<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>    execCompletionCleanup(proc);<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span><a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>    CompletedProcedureRetainer&lt;TEnvironment&gt; retainer = new CompletedProcedureRetainer&lt;&gt;(proc);<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span><a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>    // update the executor internal state maps<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>      retainer.setClientAckTime(0);<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>    }<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span><a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>    completed.put(proc.getProcId(), retainer);<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>    rollbackStack.remove(proc.getProcId());<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>    procedures.remove(proc.getProcId());<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span><a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>    // call the runnableSet completion cleanup handler<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>    try {<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>      scheduler.completionCleanup(proc);<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>    } catch (Throwable e) {<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: {}", proc, e);<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
 <span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    // call the runnableSet completion cleanup handler<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    try {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      scheduler.completionCleanup(proc);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>    } catch (Throwable e) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: {}", proc, e);<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>    }<a name="line.1757"></a>
+<span class="sourceLineNo">1751</span>    // Notify the listeners<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>  }<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span><a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>  RootProcedureState&lt;TEnvironment&gt; getProcStack(long rootProcId) {<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    return rollbackStack.get(rootProcId);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>  }<a name="line.1757"></a>
 <span class="sourceLineNo">1758</span><a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>    // Notify the listeners<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span><a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>  RootProcedureState&lt;TEnvironment&gt; getProcStack(long rootProcId) {<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>    return rollbackStack.get(rootProcId);<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  }<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>  // ==========================================================================<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>  //  Worker Thread<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>  // ==========================================================================<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>  private class WorkerThread extends StoppableThread {<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    private volatile Procedure&lt;TEnvironment&gt; activeProcedure;<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    public WorkerThread(ThreadGroup group) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      this(group, "PEWorker-");<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    }<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span><a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    protected WorkerThread(ThreadGroup group, String prefix) {<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>      super(group, prefix + workerId.incrementAndGet());<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>      setDaemon(true);<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span><a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>    @Override<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    public void sendStopSignal() {<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      scheduler.signalAll();<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    }<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span><a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>    @Override<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>    public void run() {<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      try {<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>        while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>          Procedure&lt;TEnvironment&gt; proc = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>          if (proc == null) {<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>            continue;<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>          }<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>          this.activeProcedure = proc;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>          int activeCount = activeExecutorCount.incrementAndGet();<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>          int runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>          LOG.trace("Execute pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>            runningCount, activeCount);<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>          executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>          IdLock.Entry lockEntry = procExecutionLock.getLockEntry(proc.getProcId());<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>          try {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>            executeProcedure(proc);<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>          } catch (AssertionError e) {<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            LOG.info("ASSERT pid=" + proc.getProcId(), e);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            throw e;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          } finally {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>            procExecutionLock.releaseLockEntry(lockEntry);<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>            activeCount = activeExecutorCount.decrementAndGet();<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>            runningCount = store.setRunningProcedureCount(activeCount);<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>            LOG.trace("Halt pid={} runningCount={}, activeCount={}", proc.getProcId(),<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>              runningCount, activeCount);<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>            this.activeProcedure = null;<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>            lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>            executionStartTime.set(Long.MAX_VALUE);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>          }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>        }<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>      } catch (Throwable t) {<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        LOG.warn("Worker terminating UNNATURALLY {}", this.activeProcedure, t);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>      } finally {<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        LOG.trace("Worker terminated.");<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>      }<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>      workerThreads.remove(this);<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    }<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    @Override<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    public String toString() {<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      Procedure&lt;?&gt; p = this.activeProcedure;<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>      return getName() + "(pid=" + (p == null? Procedure.NO_PROC_ID: p.getProcId() + ")");<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>    }<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span><a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    /**<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>     * @return the time since the current procedure is running<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>     */<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    public long getCurrentRunTime() {<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>    }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span><a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    // core worker never timeout<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>    protected boolean keepAlive(long lastUpdate) {<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>      return true;<a name="line.1843"></a>
-<span class="source

<TRUNCATED>

[29/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/apidocs/src-html/org/apache/hadoop/hbase/HTableDescriptor.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/HTableDescriptor.html b/apidocs/src-html/org/apache/hadoop/hbase/HTableDescriptor.html
index 19efd1a..dc5095c 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/HTableDescriptor.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/HTableDescriptor.html
@@ -73,841 +73,865 @@
 <span class="sourceLineNo">065</span>  public static final String REGION_REPLICATION = TableDescriptorBuilder.REGION_REPLICATION;<a name="line.65"></a>
 <span class="sourceLineNo">066</span>  public static final String REGION_MEMSTORE_REPLICATION = TableDescriptorBuilder.REGION_MEMSTORE_REPLICATION;<a name="line.66"></a>
 <span class="sourceLineNo">067</span>  public static final String NORMALIZATION_ENABLED = TableDescriptorBuilder.NORMALIZATION_ENABLED;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  public static final String PRIORITY = TableDescriptorBuilder.PRIORITY;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  public static final boolean DEFAULT_READONLY = TableDescriptorBuilder.DEFAULT_READONLY;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  public static final boolean DEFAULT_COMPACTION_ENABLED = TableDescriptorBuilder.DEFAULT_COMPACTION_ENABLED;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  public static final boolean DEFAULT_NORMALIZATION_ENABLED = TableDescriptorBuilder.DEFAULT_NORMALIZATION_ENABLED;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  public static final long DEFAULT_MEMSTORE_FLUSH_SIZE = TableDescriptorBuilder.DEFAULT_MEMSTORE_FLUSH_SIZE;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  public static final int DEFAULT_REGION_REPLICATION = TableDescriptorBuilder.DEFAULT_REGION_REPLICATION;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  public static final boolean DEFAULT_REGION_MEMSTORE_REPLICATION = TableDescriptorBuilder.DEFAULT_REGION_MEMSTORE_REPLICATION;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  protected final ModifyableTableDescriptor delegatee;<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  /**<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * Construct a table descriptor specifying a TableName object<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   * @param name Table name.<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-174"&gt;HADOOP-1581 HBASE: (HBASE-174) Un-openable tablename bug&lt;/a&gt;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   */<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  public HTableDescriptor(final TableName name) {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    this(new ModifyableTableDescriptor(name));<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  }<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>  /**<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * Construct a table descriptor by cloning the descriptor passed as a parameter.<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * &lt;p&gt;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   * Makes a deep copy of the supplied descriptor.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   * Can make a modifiable descriptor from an ImmutableHTableDescriptor.<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * @param desc The descriptor.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   */<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  public HTableDescriptor(final HTableDescriptor desc) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    this(desc, true);<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>  protected HTableDescriptor(final HTableDescriptor desc, boolean deepClone) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    this(deepClone ? new ModifyableTableDescriptor(desc.getTableName(), desc)<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      : desc.delegatee);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>  public HTableDescriptor(final TableDescriptor desc) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    this(new ModifyableTableDescriptor(desc.getTableName(), desc));<a name="line.103"></a>
+<span class="sourceLineNo">068</span>  public static final String NORMALIZER_TARGET_REGION_COUNT =<a name="line.68"></a>
+<span class="sourceLineNo">069</span>      TableDescriptorBuilder.NORMALIZER_TARGET_REGION_COUNT;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  public static final String NORMALIZER_TARGET_REGION_SIZE =<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      TableDescriptorBuilder.NORMALIZER_TARGET_REGION_SIZE;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  public static final String PRIORITY = TableDescriptorBuilder.PRIORITY;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  public static final boolean DEFAULT_READONLY = TableDescriptorBuilder.DEFAULT_READONLY;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  public static final boolean DEFAULT_COMPACTION_ENABLED = TableDescriptorBuilder.DEFAULT_COMPACTION_ENABLED;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  public static final boolean DEFAULT_NORMALIZATION_ENABLED = TableDescriptorBuilder.DEFAULT_NORMALIZATION_ENABLED;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  public static final long DEFAULT_MEMSTORE_FLUSH_SIZE = TableDescriptorBuilder.DEFAULT_MEMSTORE_FLUSH_SIZE;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  public static final int DEFAULT_REGION_REPLICATION = TableDescriptorBuilder.DEFAULT_REGION_REPLICATION;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  public static final boolean DEFAULT_REGION_MEMSTORE_REPLICATION = TableDescriptorBuilder.DEFAULT_REGION_MEMSTORE_REPLICATION;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  protected final ModifyableTableDescriptor delegatee;<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>  /**<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * Construct a table descriptor specifying a TableName object<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   * @param name Table name.<a name="line.83"></a>
+<span class="sourceLineNo">084</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-174"&gt;HADOOP-1581 HBASE: (HBASE-174) Un-openable tablename bug&lt;/a&gt;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   */<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  public HTableDescriptor(final TableName name) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    this(new ModifyableTableDescriptor(name));<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  }<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  /**<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * Construct a table descriptor by cloning the descriptor passed as a parameter.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * &lt;p&gt;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * Makes a deep copy of the supplied descriptor.<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   * Can make a modifiable descriptor from an ImmutableHTableDescriptor.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * @param desc The descriptor.<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public HTableDescriptor(final HTableDescriptor desc) {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    this(desc, true);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  protected HTableDescriptor(final HTableDescriptor desc, boolean deepClone) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    this(deepClone ? new ModifyableTableDescriptor(desc.getTableName(), desc)<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      : desc.delegatee);<a name="line.103"></a>
 <span class="sourceLineNo">104</span>  }<a name="line.104"></a>
 <span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>  /**<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   * Construct a table descriptor by cloning the descriptor passed as a parameter<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   * but using a different table name.<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * &lt;p&gt;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * Makes a deep copy of the supplied descriptor.<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * Can make a modifiable descriptor from an ImmutableHTableDescriptor.<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * @param name Table name.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * @param desc The descriptor.<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   */<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  public HTableDescriptor(final TableName name, final HTableDescriptor desc) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    this(new ModifyableTableDescriptor(name, desc));<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  protected HTableDescriptor(ModifyableTableDescriptor delegatee) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    this.delegatee = delegatee;<a name="line.120"></a>
+<span class="sourceLineNo">106</span>  public HTableDescriptor(final TableDescriptor desc) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    this(new ModifyableTableDescriptor(desc.getTableName(), desc));<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  /**<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * Construct a table descriptor by cloning the descriptor passed as a parameter<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * but using a different table name.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * &lt;p&gt;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * Makes a deep copy of the supplied descriptor.<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * Can make a modifiable descriptor from an ImmutableHTableDescriptor.<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   * @param name Table name.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * @param desc The descriptor.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   */<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  public HTableDescriptor(final TableName name, final HTableDescriptor desc) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    this(new ModifyableTableDescriptor(name, desc));<a name="line.120"></a>
 <span class="sourceLineNo">121</span>  }<a name="line.121"></a>
 <span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>  /**<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * This is vestigial API. It will be removed in 3.0.<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   *<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * @return always return the false<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   */<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  public boolean isRootRegion() {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    return false;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>  /**<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   * Checks if this table is &lt;code&gt; hbase:meta &lt;/code&gt;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   * region.<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   *<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   * @return true if this table is &lt;code&gt; hbase:meta &lt;/code&gt;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   * region<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  @Override<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  public boolean isMetaRegion() {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    return delegatee.isMetaRegion();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>  /**<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * Checks if the table is a &lt;code&gt;hbase:meta&lt;/code&gt; table<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   *<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * @return true if table is &lt;code&gt; hbase:meta &lt;/code&gt; region.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   */<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  @Override<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  public boolean isMetaTable() {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    return delegatee.isMetaTable();<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  }<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>   * @return Getter for fetching an unmodifiable map.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  @Override<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  public Map&lt;Bytes, Bytes&gt; getValues() {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    return delegatee.getValues();<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  }<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>  /**<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   * Setter for storing metadata as a (key, value) pair in map<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   *<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * @param key The key.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * @param value The value. If null, removes the setting.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  public HTableDescriptor setValue(byte[] key, byte[] value) {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    getDelegateeForModification().setValue(key, value);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    return this;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>  /*<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * Setter for storing metadata as a (key, value) pair in map<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   *<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * @param key The key.<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   * @param value The value. If null, removes the setting.<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   */<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  public HTableDescriptor setValue(final Bytes key, final Bytes value) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    getDelegateeForModification().setValue(key, value);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    return this;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  /**<a name="line.184"></a>
-<span class="sourceLineNo">185</span>   * Setter for storing metadata as a (key, value) pair in map<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   *<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   * @param key The key.<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   * @param value The value. If null, removes the setting.<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   */<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  public HTableDescriptor setValue(String key, String value) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    getDelegateeForModification().setValue(Bytes.toBytes(key), Bytes.toBytes(value));<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    return this;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  }<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>  /**<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   * Remove metadata represented by the key from the map<a name="line.196"></a>
-<span class="sourceLineNo">197</span>   *<a name="line.197"></a>
-<span class="sourceLineNo">198</span>   * @param key Key whose key and value we're to remove from HTableDescriptor<a name="line.198"></a>
-<span class="sourceLineNo">199</span>   * parameters.<a name="line.199"></a>
-<span class="sourceLineNo">200</span>   */<a name="line.200"></a>
-<span class="sourceLineNo">201</span>  public void remove(final String key) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    getDelegateeForModification().removeValue(Bytes.toBytes(key));<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  }<a name="line.203"></a>
-<span class="sourceLineNo">204</span><a name="line.204"></a>
-<span class="sourceLineNo">205</span>  /**<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * Remove metadata represented by the key from the map<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   *<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   * @param key Key whose key and value we're to remove from HTableDescriptor<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   * parameters.<a name="line.209"></a>
-<span class="sourceLineNo">210</span>   */<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  public void remove(Bytes key) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    getDelegateeForModification().removeValue(key);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Remove metadata represented by the key from the map<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   *<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * @param key Key whose key and value we're to remove from HTableDescriptor<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * parameters.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   */<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  public void remove(final byte [] key) {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    getDelegateeForModification().removeValue(key);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  }<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>  /**<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * Check if the readOnly flag of the table is set. If the readOnly flag is<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * set then the contents of the table can only be read from but not modified.<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   *<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * @return true if all columns in the table should be read only<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  @Override<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  public boolean isReadOnly() {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    return delegatee.isReadOnly();<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  }<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>  /**<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   * Setting the table as read only sets all the columns in the table as read<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * only. By default all tables are modifiable, but if the readOnly flag is<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * set to true then the contents of the table can only be read but not modified.<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   *<a name="line.240"></a>
-<span class="sourceLineNo">241</span>   * @param readOnly True if all of the columns in the table should be read<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   * only.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
-<span class="sourceLineNo">244</span>  public HTableDescriptor setReadOnly(final boolean readOnly) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    getDelegateeForModification().setReadOnly(readOnly);<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    return this;<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>   * Check if the compaction enable flag of the table is true. If flag is<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * false then no minor/major compactions will be done in real.<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   *<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   * @return true if table compaction enabled<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  @Override<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  public boolean isCompactionEnabled() {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    return delegatee.isCompactionEnabled();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  }<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>  /**<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   * Setting the table compaction enable flag.<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   *<a name="line.262"></a>
-<span class="sourceLineNo">263</span>   * @param isEnable True if enable compaction.<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   */<a name="line.264"></a>
-<span class="sourceLineNo">265</span>  public HTableDescriptor setCompactionEnabled(final boolean isEnable) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    getDelegateeForModification().setCompactionEnabled(isEnable);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    return this;<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>  /**<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   * Check if normalization enable flag of the table is true. If flag is<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   * false then no region normalizer won't attempt to normalize this table.<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   *<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * @return true if region normalization is enabled for this table<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  @Override<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  public boolean isNormalizationEnabled() {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    return delegatee.isNormalizationEnabled();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>  /**<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * Setting the table normalization enable flag.<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   *<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   * @param isEnable True if enable normalization.<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   */<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  public HTableDescriptor setNormalizationEnabled(final boolean isEnable) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    getDelegateeForModification().setNormalizationEnabled(isEnable);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    return this;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  /**<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   * Sets the {@link Durability} setting for the table. This defaults to Durability.USE_DEFAULT.<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * @param durability enum value<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   */<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  public HTableDescriptor setDurability(Durability durability) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    getDelegateeForModification().setDurability(durability);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    return this;<a name="line.297"></a>
+<span class="sourceLineNo">123</span>  protected HTableDescriptor(ModifyableTableDescriptor delegatee) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    this.delegatee = delegatee;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
+<span class="sourceLineNo">126</span><a name="line.126"></a>
+<span class="sourceLineNo">127</span>  /**<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * This is vestigial API. It will be removed in 3.0.<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   *<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   * @return always return the false<a name="line.130"></a>
+<span class="sourceLineNo">131</span>   */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  public boolean isRootRegion() {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    return false;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  }<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>  /**<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   * Checks if this table is &lt;code&gt; hbase:meta &lt;/code&gt;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   * region.<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   *<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   * @return true if this table is &lt;code&gt; hbase:meta &lt;/code&gt;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>   * region<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   */<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  public boolean isMetaRegion() {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    return delegatee.isMetaRegion();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  }<a name="line.146"></a>
+<span class="sourceLineNo">147</span><a name="line.147"></a>
+<span class="sourceLineNo">148</span>  /**<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * Checks if the table is a &lt;code&gt;hbase:meta&lt;/code&gt; table<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   *<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * @return true if table is &lt;code&gt; hbase:meta &lt;/code&gt; region.<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   */<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  @Override<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  public boolean isMetaTable() {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    return delegatee.isMetaTable();<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>   * @return Getter for fetching an unmodifiable map.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   */<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  @Override<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  public Map&lt;Bytes, Bytes&gt; getValues() {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    return delegatee.getValues();<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>   * Setter for storing metadata as a (key, value) pair in map<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   *<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * @param key The key.<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   * @param value The value. If null, removes the setting.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   */<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  public HTableDescriptor setValue(byte[] key, byte[] value) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    getDelegateeForModification().setValue(key, value);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    return this;<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>   * Setter for storing metadata as a (key, value) pair in map<a name="line.178"></a>
+<span class="sourceLineNo">179</span>   *<a name="line.179"></a>
+<span class="sourceLineNo">180</span>   * @param key The key.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * @param value The value. If null, removes the setting.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   */<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  public HTableDescriptor setValue(final Bytes key, final Bytes value) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    getDelegateeForModification().setValue(key, value);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    return this;<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>   * Setter for storing metadata as a (key, value) pair in map<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   *<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * @param key The key.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   * @param value The value. If null, removes the setting.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>   */<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  public HTableDescriptor setValue(String key, String value) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    getDelegateeForModification().setValue(Bytes.toBytes(key), Bytes.toBytes(value));<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    return this;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  }<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>   * Remove metadata represented by the key from the map<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   *<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   * @param key Key whose key and value we're to remove from HTableDescriptor<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   * parameters.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  public void remove(final String key) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    getDelegateeForModification().removeValue(Bytes.toBytes(key));<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  }<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>  /**<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   * Remove metadata represented by the key from the map<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   *<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   * @param key Key whose key and value we're to remove from HTableDescriptor<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   * parameters.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   */<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  public void remove(Bytes key) {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    getDelegateeForModification().removeValue(key);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  }<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>  /**<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   * Remove metadata represented by the key from the map<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   *<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * @param key Key whose key and value we're to remove from HTableDescriptor<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * parameters.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   */<a name="line.224"></a>
+<span class="sourceLineNo">225</span>  public void remove(final byte [] key) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    getDelegateeForModification().removeValue(key);<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>  /**<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * Check if the readOnly flag of the table is set. If the readOnly flag is<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * set then the contents of the table can only be read from but not modified.<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   *<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @return true if all columns in the table should be read only<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  @Override<a name="line.235"></a>
+<span class="sourceLineNo">236</span>  public boolean isReadOnly() {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    return delegatee.isReadOnly();<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  }<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>  /**<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   * Setting the table as read only sets all the columns in the table as read<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * only. By default all tables are modifiable, but if the readOnly flag is<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   * set to true then the contents of the table can only be read but not modified.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   *<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   * @param readOnly True if all of the columns in the table should be read<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   * only.<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   */<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  public HTableDescriptor setReadOnly(final boolean readOnly) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    getDelegateeForModification().setReadOnly(readOnly);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    return this;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>  }<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * Check if the compaction enable flag of the table is true. If flag is<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   * false then no minor/major compactions will be done in real.<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   *<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   * @return true if table compaction enabled<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  @Override<a name="line.259"></a>
+<span class="sourceLineNo">260</span>  public boolean isCompactionEnabled() {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    return delegatee.isCompactionEnabled();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  }<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>  /**<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   * Setting the table compaction enable flag.<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   *<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   * @param isEnable True if enable compaction.<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   */<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  public HTableDescriptor setCompactionEnabled(final boolean isEnable) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    getDelegateeForModification().setCompactionEnabled(isEnable);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    return this;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>  }<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span>  /**<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * Check if normalization enable flag of the table is true. If flag is<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * false then no region normalizer won't attempt to normalize this table.<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   *<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   * @return true if region normalization is enabled for this table<a name="line.278"></a>
+<span class="sourceLineNo">279</span>   */<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  @Override<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  public boolean isNormalizationEnabled() {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    return delegatee.isNormalizationEnabled();<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>  /**<a name="line.285"></a>
+<span class="sourceLineNo">286</span>   * Setting the table normalization enable flag.<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   *<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * @param isEnable True if enable normalization.<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   */<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public HTableDescriptor setNormalizationEnabled(final boolean isEnable) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    getDelegateeForModification().setNormalizationEnabled(isEnable);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    return this;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>  @Override<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  public int getNormalizerTargetRegionCount() {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    return getDelegateeForModification().getNormalizerTargetRegionCount();<a name="line.297"></a>
 <span class="sourceLineNo">298</span>  }<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>   * Returns the durability setting for the table.<a name="line.301"></a>
-<span class="sourceLineNo">302</span>   * @return durability setting for the table.<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   */<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  @Override<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  public Durability getDurability() {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    return delegatee.getDurability();<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>  /**<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * Get the name of the table<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   *<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * @return TableName<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   */<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  @Override<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  public TableName getTableName() {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    return delegatee.getTableName();<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  }<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>  /**<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * Get the name of the table as a String<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   *<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * @return name of table as a String<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   */<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  public String getNameAsString() {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    return delegatee.getTableName().getNameAsString();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  }<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>  /**<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * This sets the class associated with the region split policy which<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * determines when a region split should occur.  The class used by<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * default is defined in org.apache.hadoop.hbase.regionserver.RegionSplitPolicy<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * @param clazz the class name<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  public HTableDescriptor setRegionSplitPolicyClassName(String clazz) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    getDelegateeForModification().setRegionSplitPolicyClassName(clazz);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    return this;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>  /**<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * This gets the class associated with the region split policy which<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * determines when a region split should occur.  The class used by<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * default is defined in org.apache.hadoop.hbase.regionserver.RegionSplitPolicy<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   *<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   * @return the class name of the region split policy for this table.<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   * If this returns null, the default split policy is used.<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   */<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  @Override<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   public String getRegionSplitPolicyClassName() {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    return delegatee.getRegionSplitPolicyClassName();<a name="line.349"></a>
+<span class="sourceLineNo">300</span>  public HTableDescriptor setNormalizerTargetRegionCount(final int regionCount) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    getDelegateeForModification().setNormalizerTargetRegionCount(regionCount);<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    return this;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>  }<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>  @Override<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  public long getNormalizerTargetRegionSize() {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    return getDelegateeForModification().getNormalizerTargetRegionSize();<a name="line.307"></a>
+<span class="sourceLineNo">308</span>  }<a name="line.308"></a>
+<span class="sourceLineNo">309</span><a name="line.309"></a>
+<span class="sourceLineNo">310</span>  public HTableDescriptor setNormalizerTargetRegionSize(final long regionSize) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    getDelegateeForModification().setNormalizerTargetRegionSize(regionSize);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    return this;<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 name="line.315"></a>
+<span class="sourceLineNo">316</span>   * Sets the {@link Durability} setting for the table. This defaults to Durability.USE_DEFAULT.<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * @param durability enum value<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   */<a name="line.318"></a>
+<span class="sourceLineNo">319</span>  public HTableDescriptor setDurability(Durability durability) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    getDelegateeForModification().setDurability(durability);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    return this;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>  }<a name="line.322"></a>
+<span class="sourceLineNo">323</span><a name="line.323"></a>
+<span class="sourceLineNo">324</span>  /**<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   * Returns the durability setting for the table.<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * @return durability setting for the table.<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   */<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  @Override<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  public Durability getDurability() {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    return delegatee.getDurability();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  }<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>  /**<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   * Get the name of the table<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   *<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   * @return TableName<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  @Override<a name="line.338"></a>
+<span class="sourceLineNo">339</span>  public TableName getTableName() {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    return delegatee.getTableName();<a name="line.340"></a>
+<span class="sourceLineNo">341</span>  }<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>  /**<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * Get the name of the table as a String<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   *<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * @return name of table as a String<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   */<a name="line.347"></a>
+<span class="sourceLineNo">348</span>  public String getNameAsString() {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    return delegatee.getTableName().getNameAsString();<a name="line.349"></a>
 <span class="sourceLineNo">350</span>  }<a name="line.350"></a>
 <span class="sourceLineNo">351</span><a name="line.351"></a>
 <span class="sourceLineNo">352</span>  /**<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   * Returns the maximum size upto which a region can grow to after which a region<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   * split is triggered. The region size is represented by the size of the biggest<a name="line.354"></a>
-<span class="sourceLineNo">355</span>   * store file in that region.<a name="line.355"></a>
-<span class="sourceLineNo">356</span>   *<a name="line.356"></a>
-<span class="sourceLineNo">357</span>   * @return max hregion size for table, -1 if not set.<a name="line.357"></a>
-<span class="sourceLineNo">358</span>   *<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * @see #setMaxFileSize(long)<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   */<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   @Override<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  public long getMaxFileSize() {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    return delegatee.getMaxFileSize();<a name="line.363"></a>
-<span class="sourceLineNo">364</span>  }<a name="line.364"></a>
-<span class="sourceLineNo">365</span><a name="line.365"></a>
-<span class="sourceLineNo">366</span>  /**<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * Sets the maximum size upto which a region can grow to after which a region<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * split is triggered. The region size is represented by the size of the biggest<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * store file in that region, i.e. If the biggest store file grows beyond the<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * maxFileSize, then the region split is triggered. This defaults to a value of<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * 256 MB.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   * &lt;p&gt;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * This is not an absolute value and might vary. Assume that a single row exceeds<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * the maxFileSize then the storeFileSize will be greater than maxFileSize since<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * a single row cannot be split across multiple regions<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   * &lt;/p&gt;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>   *<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   * @param maxFileSize The maximum file size that a store file can grow to<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * before a split is triggered.<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   */<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  public HTableDescriptor setMaxFileSize(long maxFileSize) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    getDelegateeForModification().setMaxFileSize(maxFileSize);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    return this;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  }<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>   * Returns the size of the memstore after which a flush to filesystem is triggered.<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   *<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @return memory cache flush size for each hregion, -1 if not set.<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   *<a name="line.390"></a>
-<span class="sourceLineNo">391</span>   * @see #setMemStoreFlushSize(long)<a name="line.391"></a>
-<span class="sourceLineNo">392</span>   */<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  @Override<a name="line.393"></a>
-<span class="sourceLineNo">394</span>  public long getMemStoreFlushSize() {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    return delegatee.getMemStoreFlushSize();<a name="line.395"></a>
-<span class="sourceLineNo">396</span>  }<a name="line.396"></a>
-<span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span>  /**<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * Represents the maximum size of the memstore after which the contents of the<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * memstore are flushed to the filesystem. This defaults to a size of 64 MB.<a name="line.400"></a>
+<span class="sourceLineNo">353</span>   * This sets the class associated with the region split policy which<a name="line.353"></a>
+<span class="sourceLineNo">354</span>   * determines when a region split should occur.  The class used by<a name="line.354"></a>
+<span class="sourceLineNo">355</span>   * default is defined in org.apache.hadoop.hbase.regionserver.RegionSplitPolicy<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * @param clazz the class name<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   */<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  public HTableDescriptor setRegionSplitPolicyClassName(String clazz) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    getDelegateeForModification().setRegionSplitPolicyClassName(clazz);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    return this;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
+<span class="sourceLineNo">362</span><a name="line.362"></a>
+<span class="sourceLineNo">363</span>  /**<a name="line.363"></a>
+<span class="sourceLineNo">364</span>   * This gets the class associated with the region split policy which<a name="line.364"></a>
+<span class="sourceLineNo">365</span>   * determines when a region split should occur.  The class used by<a name="line.365"></a>
+<span class="sourceLineNo">366</span>   * default is defined in org.apache.hadoop.hbase.regionserver.RegionSplitPolicy<a name="line.366"></a>
+<span class="sourceLineNo">367</span>   *<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   * @return the class name of the region split policy for this table.<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * If this returns null, the default split policy is used.<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   */<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  @Override<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   public String getRegionSplitPolicyClassName() {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    return delegatee.getRegionSplitPolicyClassName();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  }<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span>  /**<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * Returns the maximum size upto which a region can grow to after which a region<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * split is triggered. The region size is represented by the size of the biggest<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   * store file in that region.<a name="line.379"></a>
+<span class="sourceLineNo">380</span>   *<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   * @return max hregion size for table, -1 if not set.<a name="line.381"></a>
+<span class="sourceLineNo">382</span>   *<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   * @see #setMaxFileSize(long)<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   */<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   @Override<a name="line.385"></a>
+<span class="sourceLineNo">386</span>  public long getMaxFileSize() {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    return delegatee.getMaxFileSize();<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  /**<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * Sets the maximum size upto which a region can grow to after which a region<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * split is triggered. The region size is represented by the size of the biggest<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   * store file in that region, i.e. If the biggest store file grows beyond the<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * maxFileSize, then the region split is triggered. This defaults to a value of<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * 256 MB.<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * &lt;p&gt;<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   * This is not an absolute value and might vary. Assume that a single row exceeds<a name="line.397"></a>
+<span class="sourceLineNo">398</span>   * the maxFileSize then the storeFileSize will be greater than maxFileSize since<a name="line.398"></a>
+<span class="sourceLineNo">399</span>   * a single row cannot be split across multiple regions<a name="line.399"></a>
+<span class="sourceLineNo">400</span>   * &lt;/p&gt;<a name="line.400"></a>
 <span class="sourceLineNo">401</span>   *<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * @param memstoreFlushSize memory cache flush size for each hregion<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   */<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  public HTableDescriptor setMemStoreFlushSize(long memstoreFlushSize) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    getDelegateeForModification().setMemStoreFlushSize(memstoreFlushSize);<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    return this;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  }<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>   * This sets the class associated with the flush policy which determines determines the stores<a name="line.410"></a>
-<span class="sourceLineNo">411</span>   * need to be flushed when flushing a region. The class used by default is defined in<a name="line.411"></a>
-<span class="sourceLineNo">412</span>   * org.apache.hadoop.hbase.regionserver.FlushPolicy.<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * @param clazz the class name<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   */<a name="line.414"></a>
-<span class="sourceLineNo">415</span>  public HTableDescriptor setFlushPolicyClassName(String clazz) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    getDelegateeForModification().setFlushPolicyClassName(clazz);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    return this;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  }<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span>  /**<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * This gets the class associated with the flush policy which determines the stores need to be<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * flushed when flushing a region. The class used by default is defined in<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * org.apache.hadoop.hbase.regionserver.FlushPolicy.<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   * @return the class name of the flush policy for this table. If this returns null, the default<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   *         flush policy is used.<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   */<a name="line.426"></a>
-<span class="sourceLineNo">427</span>  @Override<a name="line.427"></a>
-<span class="sourceLineNo">428</span>  public String getFlushPolicyClassName() {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    return delegatee.getFlushPolicyClassName();<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  /**<a name="line.432"></a>
-<span class="sourceLineNo">433</span>   * Adds a column family.<a name="line.433"></a>
-<span class="sourceLineNo">434</span>   * For the updating purpose please use {@link #modifyFamily(HColumnDescriptor)} instead.<a name="line.434"></a>
-<span class="sourceLineNo">435</span>   * @param family HColumnDescriptor of family to add.<a name="line.435"></a>
-<span class="sourceLineNo">436</span>   */<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  public HTableDescriptor addFamily(final HColumnDescriptor family) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    getDelegateeForModification().setColumnFamily(family);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    return this;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>  }<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>  /**<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   * Modifies the existing column family.<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * @param family HColumnDescriptor of family to update<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * @return this (for chained invocation)<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   */<a name="line.446"></a>
-<span class="sourceLineNo">447</span>  public HTableDescriptor modifyFamily(final HColumnDescriptor family) {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    getDelegateeForModification().modifyColumnFamily(family);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    return this;<a name="line.449"></a>
-<span class="sourceLineNo">450</span>  }<a name="line.450"></a>
-<span class="sourceLineNo">451</span><a name="line.451"></a>
-<span class="sourceLineNo">452</span>  /**<a name="line.452"></a>
-<span class="sourceLineNo">453</span>   * Checks to see if this table contains the given column family<a name="line.453"></a>
-<span class="sourceLineNo">454</span>   * @param familyName Family name or column name.<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   * @return true if the table contains the specified family name<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   */<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  public boolean hasFamily(final byte [] familyName) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    return delegatee.hasColumnFamily(familyName);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>  }<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>  /**<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @return Name of this table and then a map of all of the column family<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * descriptors.<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @see #getNameAsString()<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   */<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  @Override<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  public String toString() {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    return delegatee.toString();<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>   * @return Name of this table and then a map of all of the column family<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * descriptors (with only the non-default column family attributes)<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   */<a name="line.474"></a>
-<span class="sourceLineNo">475</span>  public String toStringCustomizedValues() {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    return delegatee.toStringCustomizedValues();<a name="line.476"></a>
-<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
-<span class="sourceLineNo">478</span><a name="line.478"></a>
-<span class="sourceLineNo">479</span>  /**<a name="line.479"></a>
-<span class="sourceLineNo">480</span>   * @return map of all table attributes formatted into string.<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   */<a name="line.481"></a>
-<span class="sourceLineNo">482</span>  public String toStringTableAttributes() {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   return delegatee.toStringTableAttributes();<a name="line.483"></a>
-<span class="sourceLineNo">484</span>  }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>  /**<a name="line.486"></a>
-<span class="sourceLineNo">487</span>   * Compare the contents of the descriptor with another one passed as a parameter.<a name="line.487"></a>
-<span class="sourceLineNo">488</span>   * Checks if the obj passed is an instance of HTableDescriptor, if yes then the<a name="line.488"></a>
-<span class="sourceLineNo">489</span>   * contents of the descriptors are compared.<a name="line.489"></a>
-<span class="sourceLineNo">490</span>   *<a name="line.490"></a>
-<span class="sourceLineNo">491</span>   * @return true if the contents of the the two descriptors exactly match<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   *<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * @see java.lang.Object#equals(java.lang.Object)<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   */<a name="line.494"></a>
-<span class="sourceLineNo">495</span>  @Override<a name="line.495"></a>
-<span class="sourceLineNo">496</span>  public boolean equals(Object obj) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    if (this == obj) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      return true;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    }<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    if (obj instanceof HTableDescriptor) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      return delegatee.equals(((HTableDescriptor) obj).delegatee);<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    return false;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>  }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>  /**<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   * @see java.lang.Object#hashCode()<a name="line.507"></a>
-<span class="sourceLineNo">508</span>   */<a name="line.508"></a>
-<span class="sourceLineNo">509</span>  @Override<a name="line.509"></a>
-<span class="sourceLineNo">510</span>  public int hashCode() {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    return delegatee.hashCode();<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>  // Comparable<a name="line.514"></a>
-<span class="sourceLineNo">515</span><a name="line.515"></a>
-<span class="sourceLineNo">516</span>  /**<a name="line.516"></a>
-<span class="sourceLineNo">517</span>   * Compares the descriptor with another descriptor which is passed as a parameter.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>   * This compares the content of the two descriptors and not the reference.<a name="line.518"></a>
-<span class="sourceLineNo">519</span>   *<a name="line.519"></a>
-<span class="sourceLineNo">520</span>   * @return 0 if the contents of the descriptors are exactly matching,<a name="line.520"></a>
-<span class="sourceLineNo">521</span>   *         1 if there is a mismatch in the contents<a name="line.521"></a>
-<span class="sourceLineNo">522</span>   */<a name="line.522"></a>
-<span class="sourceLineNo">523</span>  @Override<a name="line.523"></a>
-<span class="sourceLineNo">524</span>  public int compareTo(final HTableDescriptor other) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    return TableDescriptor.COMPARATOR.compare(this, other);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>  /**<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * Returns an unmodifiable collection of all the {@link HColumnDescriptor}<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * of all the column families of the table.<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   * @deprecated Use {@link #getColumnFamilies}.<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   * @return Immutable collection of {@link HColumnDescriptor} of all the<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   * column families.<a name="line.533"></a>
-<span class="sourceLineNo">534</span>   */<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  @Deprecated<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  public Collection&lt;HColumnDescriptor&gt; getFamilies() {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    return Stream.of(delegatee.getColumnFamilies())<a name="line.537"></a>
-<span class="sourceLineNo">538</span>            .map(this::toHColumnDescriptor)<a name="line.538"></a>
-<span class="sourceLineNo">539</span>            .collect(Collectors.toList());<a name="line.539"></a>
-<span class="sourceLineNo">540</span>  }<a name="line.540"></a>
-<span class="sourceLineNo">541</span><a name="line.541"></a>
-<span class="sourceLineNo">542</span>  /**<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   * Returns the configured replicas per region<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   */<a name="line.544"></a>
-<span class="sourceLineNo">545</span>  @Override<a name="line.545"></a>
-<span class="sourceLineNo">546</span>  public int getRegionReplication() {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    return delegatee.getRegionReplication();<a name="line.547"></a>
-<span class="sourceLineNo">548</span>  }<a name="line.548"></a>
-<span class="sourceLineNo">549</span><a name="line.549"></a>
-<span class="sourceLineNo">550</span>  /**<a name="line.550"></a>
-<span class="sourceLineNo">551</span>   * Sets the number of replicas per region.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   * @param regionReplication the replication factor per region<a name="line.552"></a>
-<span class="sourceLineNo">553</span>   */<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  public HTableDescriptor setRegionReplication(int regionReplication) {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    getDelegateeForModification().setRegionReplication(regionReplication);<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    return this;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>  }<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>   * @deprecated As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   *             Use {@link #hasRegionMemStoreReplication()} instead<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   */<a name="line.562"></a>
-<span class="sourceLineNo">563</span>  @Deprecated<a name="line.563"></a>
-<span class="sourceLineNo">564</span>  public boolean hasRegionMemstoreReplication() {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    return hasRegionMemStoreReplication();<a name="line.565"></a>
-<span class="sourceLineNo">566</span>  }<a name="line.566"></a>
-<span class="sourceLineNo">567</span><a name="line.567"></a>
-<span class="sourceLineNo">568</span>  /**<a name="line.568"></a>
-<span class="sourceLineNo">569</span>   * @return true if the read-replicas memstore replication is enabled.<a name="line.569"></a>
-<span class="sourceLineNo">570</span>   */<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  @Override<a name="line.571"></a>
-<span class="sourceLineNo">572</span>  public boolean hasRegionMemStoreReplication() {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    return delegatee.hasRegionMemStoreReplication();<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>   * @deprecated As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.577"></a>
-<span class="sourceLineNo">578</span>   *             Use {@link #setRegionMemStoreReplication(boolean)} instead<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   */<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  @Deprecated<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  public HTableDescriptor setRegionMemstoreReplication(boolean memstoreReplication) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    return setRegionMemStoreReplication(memstoreReplication);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>  }<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>  /**<a name="line.585"></a>
-<span class="sourceLineNo">586</span>   * Enable or Disable the memstore replication from the primary region to the replicas.<a name="line.586"></a>
-<span class="sourceLineNo">587</span>   * The replication will be used only for meta operations (e.g. flush, compaction, ...)<a name="line.587"></a>
-<span class="sourceLineNo">588</span>   *<a name="line.588"></a>
-<span class="sourceLineNo">589</span>   * @param memstoreReplication true if the new data written to the primary region<a name="line.589"></a>
-<span class="sourceLineNo">590</span>   *                                 should be replicated.<a name="line.590"></a>
-<span class="sourceLineNo">591</span>   *                            false if the secondaries can tollerate to have new<a name="line.591"></a>
-<span class="sourceLineNo">592</span>   *                                  data only when the primary flushes the memstore.<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   */<a name="line.593"></a>
-<span class="sourceLineNo">594</span>  public HTableDescriptor setRegionMemStoreReplication(boolean memstoreReplication) {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>    getDelegateeForModification().setRegionMemStoreReplication(memstoreReplication);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    return this;<a name="line.596"></a>
-<span class="sourceLineNo">597</span>  }<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span>  public HTableDescriptor setPriority(int priority) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    getDelegateeForModification().setPriority(priority);<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    return this;<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  }<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>  @Override<a name="line.604"></a>
-<span class="sourceLineNo">605</span>  public int getPriority() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    return delegatee.getPriority();<a name="line.606"></a>
+<span class="sourceLineNo">402</span>   * @param maxFileSize The maximum file size that a store file can grow to<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * before a split is triggered.<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  public HTableDescriptor setMaxFileSize(long maxFileSize) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    getDelegateeForModification().setMaxFileSize(maxFileSize);<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    return this;<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>   * Returns the size of the memstore after which a flush to filesystem is triggered.<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   *<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   * @return memory cache flush size for each hregion, -1 if not set.<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   *<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * @see #setMemStoreFlushSize(long)<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 long getMemStoreFlushSize() {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    return delegatee.getMemStoreFlushSize();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>  }<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span>  /**<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * Represents the maximum size of the memstore after which the contents of the<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * memstore are flushed to the filesystem. This defaults to a size of 64 MB.<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   *<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * @param memstoreFlushSize memory cache flush size for each hregion<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   */<a name="line.427"></a>
+<span class="sourceLineNo">428</span>  public HTableDescriptor setMemStoreFlushSize(long memstoreFlushSize) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    getDelegateeForModification().setMemStoreFlushSize(memstoreFlushSize);<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    return this;<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>   * This sets the class associated with the flush policy which determines determines the stores<a name="line.434"></a>
+<span class="sourceLineNo">435</span>   * need to be flushed when flushing a region. The class used by default is defined in<a name="line.435"></a>
+<span class="sourceLineNo">436</span>   * org.apache.hadoop.hbase.regionserver.FlushPolicy.<a name="line.436"></a>
+<span class="sourceLineNo">437</span>   * @param clazz the class name<a name="line.437"></a>
+<span class="sourceLineNo">438</span>   */<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  public HTableDescriptor setFlushPolicyClassName(String clazz) {<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    getDelegateeForModification().setFlushPolicyClassName(clazz);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    return this;<a name="line.441"></a>
+<span class="sourceLineNo">442</span>  }<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span>  /**<a name="line.444"></a>
+<span class="sourceLineNo">445</span>   * This gets the class associated with the flush policy which determines the stores need to be<a name="line.445"></a>
+<span class="sourceLineNo">446</span>   * flushed when flushing a region. The class used by default is defined in<a name="line.446"></a>
+<span class="sourceLineNo">447</span>   * org.apache.hadoop.hbase.regionserver.FlushPolicy.<a name="line.447"></a>
+<span class="sourceLineNo">448</span>   * @return the class name of the flush policy for this table. If this returns null, the default<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   *         flush policy is used.<a name="line.449"></a>
+<span class="sourceLineNo">450</span>   */<a name="line.450"></a>
+<span class="sourceLineNo">451</span>  @Override<a name="line.451"></a>
+<span class="sourceLineNo">452</span>  public String getFlushPolicyClassName() {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    return delegatee.getFlushPolicyClassName();<a name="line.453"></a>
+<span class="sourceLineNo">454</span>  }<a name="line.454"></a>
+<span class="sourceLineNo">455</span><a name="line.455"></a>
+<span class="sourceLineNo">456</span>  /**<a name="line.456"></a>
+<span class="sourceLineNo">457</span>   * Adds a column family.<a name="line.457"></a>
+<span class="sourceLineNo">458</span>   * For the updating purpose please use {@link #modifyFamily(HColumnDescriptor)} instead.<a name="line.458"></a>
+<span class="sourceLineNo">459</span>   * @param family HColumnDescriptor of family to add.<a name="line.459"></a>
+<span class="sourceLineNo">460</span>   */<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  public HTableDescriptor addFamily(final HColumnDescriptor family) {<a name="line.461"></a>
+<span class="sourceLineNo">462</span>    getDelegateeForModification().setColumnFamily(family);<a name="line.462"></a>
+<span class="sourceLineNo">463</span>    return this;<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  }<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>   * Modifies the existing column family.<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * @param family HColumnDescriptor of family to update<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   * @return this (for chained invocation)<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   */<a name="line.470"></a>
+<span class="sourceLineNo">471</span>  public HTableDescriptor modifyFamily(final HColumnDescriptor family) {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    getDelegateeForModification().modifyColumnFamily(family);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    return this;<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  }<a name="line.474"></a>
+<span class="sourceLineNo">475</span><a name="line.475"></a>
+<span class="sourceLineNo">476</span>  /**<a name="line.476"></a>
+<span class="sourceLineNo">477</span>   * Checks to see if this table contains the given column family<a name="line.477"></a>
+<span class="sourceLineNo">478</span>   * @param familyName Family name or column name.<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   * @return true if the table contains the specified family name<a name="line.479"></a>
+<span class="sourceLineNo">480</span>   */<a name="line.480"></a>
+<span class="sourceLineNo">481</span>  public boolean hasFamily(final byte [] familyName) {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    return delegatee.hasColumnFamily(familyName);<a name="line.482"></a>
+<span class="sourceLineNo">483</span>  }<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>  /**<a name="line.485"></a>
+<span class="sourceLineNo">486</span>   * @return Name of this table and then a map of all of the column family<a na

<TRUNCATED>

[32/32] hbase-site git commit: Published site at a07e755625382d3904c935c21a4f240ede6d2f43.

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


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

Branch: refs/heads/asf-site
Commit: 75e49c45ba73df77c2509c81938adb1e8fb2d7b3
Parents: 69bf677
Author: jenkins <bu...@apache.org>
Authored: Mon Aug 13 14:49:16 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Mon Aug 13 14:49:16 2018 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |     4 +-
 apache_hbase_reference_guide.pdf                |     4 +-
 apidocs/constant-values.html                    |    14 +
 apidocs/index-all.html                          |    40 +
 .../apache/hadoop/hbase/HTableDescriptor.html   |   414 +-
 .../hbase/class-use/HTableDescriptor.html       |    12 +
 .../hadoop/hbase/client/TableDescriptor.html    |    86 +-
 .../hbase/client/TableDescriptorBuilder.html    |   132 +-
 .../class-use/TableDescriptorBuilder.html       |     8 +
 .../apache/hadoop/hbase/HTableDescriptor.html   |  1654 +-
 .../hadoop/hbase/client/TableDescriptor.html    |    94 +-
 .../hbase/client/TableDescriptorBuilder.html    |  2508 +--
 book.html                                       |     2 +-
 bulk-loads.html                                 |     4 +-
 checkstyle-aggregate.html                       | 14912 ++++++++---------
 checkstyle.rss                                  |     4 +-
 coc.html                                        |     4 +-
 dependencies.html                               |     4 +-
 dependency-convergence.html                     |     4 +-
 dependency-info.html                            |     4 +-
 dependency-management.html                      |     4 +-
 devapidocs/constant-values.html                 |    34 +-
 devapidocs/index-all.html                       |    60 +
 .../apache/hadoop/hbase/HTableDescriptor.html   |   414 +-
 .../hadoop/hbase/backup/package-tree.html       |     4 +-
 .../hbase/class-use/HTableDescriptor.html       |    12 +
 .../hbase/client/ImmutableHTableDescriptor.html |     4 +-
 .../hadoop/hbase/client/TableDescriptor.html    |    86 +-
 ...riptorBuilder.ModifyableTableDescriptor.html |   346 +-
 .../hbase/client/TableDescriptorBuilder.html    |   232 +-
 ...riptorBuilder.ModifyableTableDescriptor.html |    12 +
 .../class-use/TableDescriptorBuilder.html       |     8 +
 .../hadoop/hbase/client/package-tree.html       |    24 +-
 .../hadoop/hbase/coprocessor/package-tree.html  |     2 +-
 .../hadoop/hbase/executor/package-tree.html     |     2 +-
 .../hadoop/hbase/filter/package-tree.html       |    12 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |     8 +-
 .../apache/hadoop/hbase/ipc/package-tree.html   |     2 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |     4 +-
 .../hadoop/hbase/master/TableStateManager.html  |    16 +-
 .../hbase/master/balancer/package-tree.html     |     2 +-
 .../SimpleRegionNormalizer.PlanComparator.html  |     6 +-
 .../normalizer/SimpleRegionNormalizer.html      |    28 +-
 .../hadoop/hbase/master/package-tree.html       |     4 +-
 .../hbase/master/procedure/package-tree.html    |     2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    16 +-
 ...ProcedureExecutor.KeepAliveWorkerThread.html |     6 +-
 .../ProcedureExecutor.WorkerMonitor.html        |    32 +-
 .../ProcedureExecutor.WorkerThread.html         |    20 +-
 .../hbase/procedure2/ProcedureExecutor.html     |    22 +-
 .../hadoop/hbase/procedure2/package-tree.html   |     6 +-
 .../hadoop/hbase/quotas/package-tree.html       |     8 +-
 .../hadoop/hbase/regionserver/package-tree.html |    20 +-
 .../regionserver/querymatcher/package-tree.html |     2 +-
 .../hbase/regionserver/wal/package-tree.html    |     2 +-
 .../replication/regionserver/package-tree.html  |     2 +-
 .../hbase/security/access/package-tree.html     |     2 +-
 .../hadoop/hbase/security/package-tree.html     |     2 +-
 .../hadoop/hbase/util/class-use/Bytes.html      |     8 +
 .../apache/hadoop/hbase/util/package-tree.html  |    10 +-
 .../apache/hadoop/hbase/HTableDescriptor.html   |  1654 +-
 .../org/apache/hadoop/hbase/Version.html        |     6 +-
 .../hadoop/hbase/client/TableDescriptor.html    |    94 +-
 ...riptorBuilder.ModifyableTableDescriptor.html |  2508 +--
 .../hbase/client/TableDescriptorBuilder.html    |  2508 +--
 ...tateManager.TableStateNotFoundException.html |   291 +-
 .../hadoop/hbase/master/TableStateManager.html  |   291 +-
 .../SimpleRegionNormalizer.PlanComparator.html  |   434 +-
 .../normalizer/SimpleRegionNormalizer.html      |   434 +-
 ...edureExecutor.CompletedProcedureCleaner.html |  1124 +-
 ...dureExecutor.CompletedProcedureRetainer.html |  1124 +-
 .../ProcedureExecutor.FailedProcedure.html      |  1124 +-
 ...ProcedureExecutor.KeepAliveWorkerThread.html |  1124 +-
 ...edureExecutor.ProcedureExecutorListener.html |  1124 +-
 .../procedure2/ProcedureExecutor.Testing.html   |  1124 +-
 .../ProcedureExecutor.WorkerMonitor.html        |  1124 +-
 .../ProcedureExecutor.WorkerThread.html         |  1124 +-
 .../hbase/procedure2/ProcedureExecutor.html     |  1124 +-
 downloads.html                                  |     4 +-
 export_control.html                             |     4 +-
 index.html                                      |     4 +-
 integration.html                                |     4 +-
 issue-tracking.html                             |     4 +-
 license.html                                    |     4 +-
 mail-lists.html                                 |     4 +-
 metrics.html                                    |     4 +-
 old_news.html                                   |     4 +-
 plugin-management.html                          |     4 +-
 plugins.html                                    |     4 +-
 poweredbyhbase.html                             |     4 +-
 project-info.html                               |     4 +-
 project-reports.html                            |     4 +-
 project-summary.html                            |     4 +-
 pseudo-distributed.html                         |     4 +-
 replication.html                                |     4 +-
 resources.html                                  |     4 +-
 source-repository.html                          |     4 +-
 sponsors.html                                   |     4 +-
 supportingprojects.html                         |     4 +-
 team-list.html                                  |     4 +-
 testdevapidocs/index-all.html                   |     4 +
 .../hadoop/hbase/backup/package-tree.html       |     2 +-
 .../normalizer/TestSimpleRegionNormalizer.html  |    74 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    10 +-
 .../hadoop/hbase/procedure/package-tree.html    |     8 +-
 .../hadoop/hbase/regionserver/package-tree.html |     6 +-
 .../apache/hadoop/hbase/test/package-tree.html  |     4 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |     2 +-
 .../normalizer/TestSimpleRegionNormalizer.html  |   835 +-
 109 files changed, 20943 insertions(+), 19820 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index f5877af..81b88be 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="20180812" />
+    <meta name="Date-Revision-yyyymmdd" content="20180813" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) ACID Properties
@@ -601,7 +601,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-08-12</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-13</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 37044e7..cde037a 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:20180812142958+00'00')
-/CreationDate (D:20180812144542+00'00')
+/ModDate (D:20180813142957+00'00')
+/CreationDate (D:20180813144552+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/apidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/apidocs/constant-values.html b/apidocs/constant-values.html
index 5093a0f..2dcadb2 100644
--- a/apidocs/constant-values.html
+++ b/apidocs/constant-values.html
@@ -2706,6 +2706,20 @@
 <td class="colLast"><code>"NORMALIZATION_ENABLED"</code></td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.HTableDescriptor.NORMALIZER_TARGET_REGION_COUNT">
+<!--   -->
+</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/HTableDescriptor.html#NORMALIZER_TARGET_REGION_COUNT">NORMALIZER_TARGET_REGION_COUNT</a></code></td>
+<td class="colLast"><code>"NORMALIZER_TARGET_REGION_COUNT"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.HTableDescriptor.NORMALIZER_TARGET_REGION_SIZE">
+<!--   -->
+</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/HTableDescriptor.html#NORMALIZER_TARGET_REGION_SIZE">NORMALIZER_TARGET_REGION_SIZE</a></code></td>
+<td class="colLast"><code>"NORMALIZER_TARGET_REGION_SIZE"</code></td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HTableDescriptor.OWNER">
 <!--   -->
 </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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/75e49c45/apidocs/index-all.html
----------------------------------------------------------------------
diff --git a/apidocs/index-all.html b/apidocs/index-all.html
index 127fbc5..b7b6378 100644
--- a/apidocs/index-all.html
+++ b/apidocs/index-all.html
@@ -7463,6 +7463,22 @@
 <dd>
 <div class="block">Pick the next cell that the scanner should seek to.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TableDescriptor.html#getNormalizerTargetRegionCount--">getNormalizerTargetRegionCount()</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a></dt>
+<dd>
+<div class="block">Check if there is the target region count.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#getNormalizerTargetRegionCount--">getNormalizerTargetRegionCount()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></dt>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TableDescriptor.html#getNormalizerTargetRegionSize--">getNormalizerTargetRegionSize()</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a></dt>
+<dd>
+<div class="block">Check if there is the target region size.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#getNormalizerTargetRegionSize--">getNormalizerTargetRegionSize()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></dt>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Result.html#getNoVersionMap--">getNoVersionMap()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a></dt>
 <dd>
 <div class="block">Map of families to their most recent qualifiers and values.</div>
@@ -12833,6 +12849,18 @@
 <dd>
 <div class="block">Invoke region normalizer.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#NORMALIZER_TARGET_REGION_COUNT">NORMALIZER_TARGET_REGION_COUNT</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#NORMALIZER_TARGET_REGION_COUNT">NORMALIZER_TARGET_REGION_COUNT</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></dt>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#NORMALIZER_TARGET_REGION_SIZE">NORMALIZER_TARGET_REGION_SIZE</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#NORMALIZER_TARGET_REGION_SIZE">NORMALIZER_TARGET_REGION_SIZE</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></dt>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Admin.html#normalizerSwitch-boolean-">normalizerSwitch(boolean)</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a></dt>
 <dd>
 <div class="block">Turn region normalizer on or off.</div>
@@ -16570,6 +16598,18 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
  instead.</span></div>
 </div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setNormalizerTargetRegionCount-int-">setNormalizerTargetRegionCount(int)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#setNormalizerTargetRegionCount-int-">setNormalizerTargetRegionCount(int)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></dt>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setNormalizerTargetRegionSize-long-">setNormalizerTargetRegionSize(long)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#setNormalizerTargetRegionSize-long-">setNormalizerTargetRegionSize(long)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></dt>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapred/TableMapReduceUtil.html#setNumMapTasks-java.lang.String-org.apache.hadoop.mapred.JobConf-">setNumMapTasks(String, JobConf)</a></span> - Static method in class org.apache.hadoop.hbase.mapred.<a href="org/apache/hadoop/hbase/mapred/TableMapReduceUtil.html" title="class in org.apache.hadoop.hbase.mapred">TableMapReduceUtil</a></dt>
 <dd>
 <div class="block">Sets the number of map tasks for the given job configuration to the